Атрибут столбца после groupBy в pyspark

Мне нужен результирующий фрейм данных в строке ниже, чтобы иметь псевдоним "maxDiff" для столбца max ( "diff" ) после groupBy. Однако нижняя строка не меняет никаких изменений и не выдает ошибку.

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

Ответ 1

Это происходит потому, что вы накладываете весь объект 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

Вы можете использовать agg вместо вызова метода max:

from pyspark.sql.functions import max

joined_df.groupBy(temp1.datestamp).agg(max("diff").alias("maxDiff"))

Ответ 3

В дополнение к уже указанным ответам, следующие удобные способы, если вы знаете имя агрегированного столбца, где вам не нужно импортировать из pyspark.sql.functions:

1

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

Смотрите docs для информации в .selectExpr()

2

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

Смотрите docs для информации на .withColumnRenamed()

Этот ответ здесь более подробно: fooobar.com/info/156901/...