0

我有 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()

任何 1 都可以解释这种行为吗?

4

2 回答 2

2

selectExpr将所有内容作为selectsql 中的子句。因此,如果您在单引号中写入任何内容',它将在 sql 中充当字符串。如果您想传递列以selectExpr使用 backtique (`),如下所示 -

df.selectExpr("""first(`StockCode`) as first_value""", """last(`StockCode`) as last_value""").show()

backtique 将帮助您逃离列中的空间。

如果您的列名不是以数字开头12col或者它之间没有空格,您也可以不使用 backtiquecolumn name

df.selectExpr("""first(StockCode) as first_value""", """last(StockCode) as last_value""").show()
于 2020-07-15T18:14:53.043 回答
1

你应该像下面这样通过

df_b = df_b.selectExpr('first(count) as first', 'last(count) as last')
df_b.show(truncate = False)

+-----+----+
|first|last|
+-----+----+
|2527 |13  |
+-----+----+
于 2020-07-15T12:59:22.127 回答