Объедините вращение и групповую агрегацию в PySpark Dataframe - PullRequest
0 голосов
/ 06 февраля 2020

Я повторно использую пример в Объединить сводный и агрегированный столбец в PySpark Dataframe

Допустим, у меня есть Spark Dataframe

 date      | recipe | percent | volume
----------------------------------------
2019-01-01 |   A    |  0.03   |  53
2019-01-01 |   A    |  0.02   |  55
2019-01-01 |   B    |  0.05   |  60
2019-01-02 |   A    |  0.11   |  75
2019-01-02 |   B    |  0.06   |  64
2019-01-02 |   B    |  0.08   |  66

Как мне развернуть в одном столбце и агрегирование в другом, например, следующий псевдокод:

df.groupBy('date').max('volume').alias('max_volume').pivot('recipe').agg(avg('percent').alias('percent')).show()

 date      | A_percent | B_percent | max_volume
--------------------------------------------------------
2019-01-01 |   0.025   |  0.05     |  60
2019-01-02 |   0.11    |  0.07     |  75

Я бы хотел добиться этого за один шаг, не выполняя max для столбцов A_volume и B_volume позже, чтобы избежать присвоения им имен.

пс. Когда я запускаю этот псевдокод, я получаю

AttributeError: 'DataFrame' object has no attribute 'pivot'

1 Ответ

1 голос
/ 06 февраля 2020

Попробуйте это:

from pyspark.sql.functions import *
from pyspark.sql import Window
var win = Window.partitionBy("date") 
data.withColumn("max_vol",max("volume").over(win)).groupBy("date","max_vol") .pivot("recipe") .agg(avg("percent")).show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...