在pyspark中groupBy之后的列别名

时间:2015-11-04 07:56:23

标签: python scala apache-spark pyspark apache-spark-sql

我需要在下面的行中得到数据框,以便在groupBy之后为max('diff')列创建一个别名“maxDiff”。但是,下面的行不做任何改变,也不会抛出错误。

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

3 个答案:

答案 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()

的信息,请参阅docs

<强> 2

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

有关.withColumnRenamed()

的信息,请参阅docs

这里的答案更详细:https://stackoverflow.com/a/34077809