Псевдонимы столбцов после groupBy в PySpark
Нужна помощь с проблемой в коде. Я пытаюсь получить из DataFrame, сформированного с помощью groupBy
, колонку с максимальным значением 'diff', и чтобы эта колонка имела псевдоним "maxDiff". Однако строка кода ниже не изменяет результат, и при этом не выдает никаких ошибок.
grpdf = joined_df.groupBy(temp1.datestamp).max('diff').alias("maxDiff")
Как правильно задать псевдоним для колонки в результате groupBy
?
3 ответ(ов)
Вместо вызова метода 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
.
Это происходит потому, что вы создаете псевдоним для всего объекта DataFrame
, а не только для колонки. Вот пример, как создать псевдоним только для колонки:
import pyspark.sql.functions as func
grpdf = joined_df \
.groupBy(temp1.datestamp) \
.max('diff') \
.select(func.col("max(diff)").alias("maxDiff"))
Вы можете использовать следующий код для выборки максимального значения и суммы столбца DIFF
в DataFrame grpdf
:
grouped_df = grpdf.select(expr("max(diff) as maxdiff"), expr("sum(DIFF) as sumdiff")).show()
Здесь мы используем функцию expr()
для выполнения SQL-подобного выражения, чтобы получить максимальное значение diff
и сумму DIFF
, а затем выводим результат с помощью метода show()
.
Применение UDF в GroupedData в PySpark (с работающим примером на Python)
Как сопоставить любой символ на нескольких строках в регулярном выражении?
Как посчитать количество каждой уникальной значения в DataFrame PySpark?
Как изменить порядок столбцов в DataFrame?
'pip' не распознан как командa внутреннего или внешнего формата