pyspark 中 groupBy 后的列别名

Column alias after groupBy in pyspark

我需要下面一行中的结果数据框,以便在 groupBy 之后的 max('diff') 列有一个别名 "maxDiff"。然而,下面的行没有做任何改变,也没有抛出错误。

 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"))

在 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"))

除了这里已有的答案之外,如果您知道聚合列的名称,以下也是方便的方法,您不必从 pyspark.sql.functions:

导入

1

grouped_df = joined_df.groupBy(temp1.datestamp) \
                      .max('diff') \
                      .selectExpr('max(diff) AS maxDiff')

有关 .selectExpr()

的信息,请参阅 docs

2

grouped_df = joined_df.groupBy(temp1.datestamp) \
                      .max('diff') \
                      .withColumnRenamed('max(diff)', 'maxDiff')

有关 .withColumnRenamed()

的信息,请参见 docs

这里的答案更详细:

你可以使用。

grouped_df = grpdf.select(col("max(diff)") as "maxdiff",col("sum(DIFF)") as "sumdiff").show()