我需要下面一行中的結果數據框,爲groupBy之後的max('diff')列創建別名「maxDiff」。但是,下面的行不會改變,也不會拋出錯誤。pyspark中的groupBy之後的列別名
grpdf = joined_df.groupBy(temp1.datestamp).max('diff').alias("maxDiff")
我需要下面一行中的結果數據框,爲groupBy之後的max('diff')列創建別名「maxDiff」。但是,下面的行不會改變,也不會拋出錯誤。pyspark中的groupBy之後的列別名
grpdf = joined_df.groupBy(temp1.datestamp).max('diff').alias("maxDiff")
這是因爲你走樣整個DataFrame
對象,而不是Column
。下面是一個例子如何別名Column
只:
import pyspark.sql.functions as func
grpdf = joined_df \
.groupBy(temp1.datestamp) \
.max('diff') \
.select(func.col("max(diff)").alias("maxDiff"))
可以使用agg
,而不是調用max
方法:
from pyspark.sql.functions import max
joined_df.groupBy(temp1.datestamp).agg(max("diff").alias("maxDiff"))
我更喜歡這個接受的答案,因爲它不需要提前知道Spark將給予聚合列的名字。 – abeboparebop
除了答案已經在這裏,下面也方便的方式,如果你知道集合列,在這裏你不必從pyspark.sql.functions
進口的名字:
grouped_df = joined_df.groupBy(temp1.datestamp) \
.max('diff') \
.selectExpr('max(diff) AS maxDiff')
的信息,請參閱docs上.selectExpr()
grouped_df = joined_df.groupBy(temp1.datestamp) \
.max('diff') \
.withColumnRenamed('max(diff)', 'maxDiff')
見docs的信息上.withColumnRenamed()
這裏這個答案進入更多細節:https://stackoverflow.com/a/34077809
**你有沒有嘗試第一個代碼塊?**這似乎是錯誤的。 Spark無法用提到的方式解析列名。在你的代碼塊中,spark試着找到** diff **列並嘗試運行給定set上的** max **函數,但是grouped_data不包含任何** diff **列,它包含** temp1.datestamp和MAX(DIFF)**。 –
是的..這個工程..除了func。不是必需的 – mhn
這不是如果你已經將'pyspark.sql.functions'導入你的腳本 – Nhor