добавление нового столбца в мой искровой фрейм данных и вычисление суммы () - PullRequest
0 голосов
/ 20 мая 2019

AttributeError: у объекта «DataFrame» нет атрибута «_get_object_id»

enter image description here

1 Ответ

0 голосов
/ 20 мая 2019

Прежде всего: очень важно, чтобы вы дали нам воспроизводимый пример вашего фрейма данных.Никто не любит смотреть на скриншоты, чтобы определить ошибку.

Ваш код не работает, потому что spark не может определить, как строки вашего groupby и вашего исходного кадра данных могут быть объединены.Он не знает, что NUM_TIERS является своего рода ключом.Поэтому вы должны указать искре, какой столбец (столбцы) следует использовать для объединения группы и исходного кадра данных.

import pyspark.sql.functions as F
from pyspark.sql import Window

l = [('OBAAAA7K2KBBO'       , 34),
('OBAAAA878000K'      , 138  ),
('OBAAAA878A2A0'      , 164  ),
('OBAAAA7K2KBBO'      , 496),
('OBAAAA878000K'      , 91)]

columns = ['NUM_TIERS', 'MONTAN_TR']

df=spark.createDataFrame(l, columns)

У вас есть варианты, чтобы сделать это.Вы можете использовать join :

df = df.join(df.groupby('NUM_TIERS').sum('MONTAN_TR'), 'NUM_TIERS')
df.show()

ИЛИ окно функция:

w = Window.partitionBy('NUM_TIERS')

df = df.withColumn('SUM', F.sum('MONTAN_TR').over(w))

Вывододинаково для обоих способов:

+-------------+---------+---+ 
|    NUM_TIERS|MONTAN_TR|SUM| 
+-------------+---------+---+ 
|OBAAAA7K2KBBO|       34|530| 
|OBAAAA7K2KBBO|      496|530| 
|OBAAAA878000K|      138|229| 
|OBAAAA878000K|       91|229| 
|OBAAAA878A2A0|      164|164| 
+-------------+---------+---+
...