pysp中groupBy之后的列别名

2024-09-25 06:36:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要下面一行的结果数据框,以便在groupBy后面的max('diff')列有一个别名“maxDiff”。但是,下面的行不会进行任何更改,也不会抛出错误。

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

Tags: 数据df错误diffaliasmaxgroupbyjoined
3条回答

除了这里已经给出的答案之外,如果您知道聚合列的名称(在这里您不必从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

这是因为您正在对整个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"))

相关问题 更多 >