Атрибут столбца после 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/...