Pyspark SelectExp() 不适用于 first() 和 last()
Pyspark SelectExp() not working for first() and last()
我有 2 个语句据我所知完全相同,但是 select()
工作正常,但是 selectExpr()
生成以下结果。
+-----------------------+----------------------+
|first(StockCode, false)|last(StockCode, false)|
+-----------------------+----------------------+
| 85123A| 22138|
+-----------------------+----------------------+
+-----------+----------+
|first_value|last_value|
+-----------+----------+
| StockCode| StockCode|
+-----------+----------+
下面是实现。
df.select(first(col("StockCode")), last(col("StockCode"))).show()
df.selectExpr("""first('StockCode') as first_value""", """last('StockCode') as last_value""").show()
任何一位都可以解释这种行为吗?
你应该像下面这样通过
df_b = df_b.selectExpr('first(count) as first', 'last(count) as last')
df_b.show(truncate = False)
+-----+----+
|first|last|
+-----+----+
|2527 |13 |
+-----+----+
selectExpr
将所有内容作为 sql 中的 select
子句。
因此,如果你用单引号 '
写任何东西,它将作为 sql 中的字符串。如果您想将列传递给 selectExpr
使用 backtique (`),如下所示-
df.selectExpr("""first(`StockCode`) as first_value""", """last(`StockCode`) as last_value""").show()
backtique 会帮你转义space列中的
如果您的列名称不是以 12col
之类的数字开头,或者它之间没有 space 之类的 column name
[=18=,您也可以不使用 backtique ]
df.selectExpr("""first(StockCode) as first_value""", """last(StockCode) as last_value""").show()
我有 2 个语句据我所知完全相同,但是 select()
工作正常,但是 selectExpr()
生成以下结果。
+-----------------------+----------------------+
|first(StockCode, false)|last(StockCode, false)|
+-----------------------+----------------------+
| 85123A| 22138|
+-----------------------+----------------------+
+-----------+----------+
|first_value|last_value|
+-----------+----------+
| StockCode| StockCode|
+-----------+----------+
下面是实现。
df.select(first(col("StockCode")), last(col("StockCode"))).show()
df.selectExpr("""first('StockCode') as first_value""", """last('StockCode') as last_value""").show()
任何一位都可以解释这种行为吗?
你应该像下面这样通过
df_b = df_b.selectExpr('first(count) as first', 'last(count) as last')
df_b.show(truncate = False)
+-----+----+
|first|last|
+-----+----+
|2527 |13 |
+-----+----+
selectExpr
将所有内容作为 sql 中的 select
子句。
因此,如果你用单引号 '
写任何东西,它将作为 sql 中的字符串。如果您想将列传递给 selectExpr
使用 backtique (`),如下所示-
df.selectExpr("""first(`StockCode`) as first_value""", """last(`StockCode`) as last_value""").show()
backtique 会帮你转义space列中的
如果您的列名称不是以 12col
之类的数字开头,或者它之间没有 space 之类的 column name
[=18=,您也可以不使用 backtique ]
df.selectExpr("""first(StockCode) as first_value""", """last(StockCode) as last_value""").show()