我需要在下面的行中得到数据框,以便在groupBy之后为max('diff')列创建一个别名“maxDiff”。但是,下面的行不做任何改变,也不会抛出错误。
grpdf = joined_df.groupBy(temp1.datestamp).max('diff').alias("maxDiff")
答案 0 :(得分:46)
您可以使用agg
代替调用max
方法:
from pyspark.sql.functions import max
joined_df.groupBy(temp1.datestamp).agg(max("diff").alias("maxDiff"))
同样在Scala中
import org.apache.spark.sql.functions.max
joined_df.groupBy($"datestamp").agg(max("diff").alias("maxDiff"))
或
joined_df.groupBy($"datestamp").agg(max("diff").as("maxDiff"))
答案 1 :(得分:24)
这是因为您对整个DataFrame
对象设置了别名,而不是Column
。以下是如何仅对Column
进行别名的示例:
import pyspark.sql.functions as func
grpdf = joined_df \
.groupBy(temp1.datestamp) \
.max('diff') \
.select(func.col("max(diff)").alias("maxDiff"))
答案 2 :(得分:1)
除了此处已有的答案之外,如果您知道汇总列的名称,以下也是方便的方法,您无需从pyspark.sql.functions
导入:
<强> 1 强>
grouped_df = joined_df.groupBy(temp1.datestamp) \
.max('diff') \
.selectExpr('max(diff) AS maxDiff')
有关.selectExpr()
<强> 2 强>
grouped_df = joined_df.groupBy(temp1.datestamp) \
.max('diff') \
.withColumnRenamed('max(diff)', 'maxDiff')
有关.withColumnRenamed()
这里的答案更详细:https://stackoverflow.com/a/34077809