我需要下面一行中的结果数据框,为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