0

Псевдонимы столбцов после groupBy в PySpark

8

Нужна помощь с проблемой в коде. Я пытаюсь получить из DataFrame, сформированного с помощью groupBy, колонку с максимальным значением 'diff', и чтобы эта колонка имела псевдоним "maxDiff". Однако строка кода ниже не изменяет результат, и при этом не выдает никаких ошибок.

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

Как правильно задать псевдоним для колонки в результате groupBy?

3 ответ(ов)

1

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

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

Таким образом, вы можете легко агрегировать данные и получать максимальное значение столбца diff по группам, сгруппированным по datestamp.

0

Это происходит потому, что вы создаете псевдоним для всего объекта DataFrame, а не только для колонки. Вот пример, как создать псевдоним только для колонки:

import pyspark.sql.functions as func

grpdf = joined_df \
    .groupBy(temp1.datestamp) \
    .max('diff') \
    .select(func.col("max(diff)").alias("maxDiff"))
0

Вы можете использовать следующий код для выборки максимального значения и суммы столбца DIFF в DataFrame grpdf:

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

Здесь мы используем функцию expr() для выполнения SQL-подобного выражения, чтобы получить максимальное значение diff и сумму DIFF, а затем выводим результат с помощью метода show().

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь