2015-11-04 47 views
11

我需要下面一行中的結果數據框,爲groupBy之後的max('diff')列創建別名「maxDiff」。但是,下面的行不會改變,也不會拋出錯誤。pyspark中的groupBy之後的列別名

grpdf = joined_df.groupBy(temp1.datestamp).max('diff').alias("maxDiff") 

回答

12

這是因爲你走樣整個DataFrame對象,而不是Column。下面是一個例子如何別名Column只:

import pyspark.sql.functions as func 

grpdf = joined_df \ 
    .groupBy(temp1.datestamp) \ 
    .max('diff') \ 
    .select(func.col("max(diff)").alias("maxDiff")) 
+0

是的..這個工程..除了func。不是必需的 – mhn

+1

這不是如果你已經將'pyspark.sql.functions'導入你的腳本 – Nhor

25

可以使用agg,而不是調用max方法:

from pyspark.sql.functions import max 

joined_df.groupBy(temp1.datestamp).agg(max("diff").alias("maxDiff")) 
+2

我更喜歡這個接受的答案,因爲它不需要提前知道Spark將給予聚合列的名字。 – abeboparebop

0

除了答案已經在這裏,下面也方便的方式,如果你知道集合列,在這裏你不必從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

+0

**你有沒有嘗試第一個代碼塊?**這似乎是錯誤的。 Spark無法用提到的方式解析列名。在你的代碼塊中,spark試着找到** diff **列並嘗試運行給定set上的** max **函數,但是grouped_data不包含任何** diff **列,它包含** temp1.datestamp和MAX(DIFF)**。 –

相關問題