将新列添加到我的spark数据框,并计算sum()

时间:2019-05-20 10:14:35

标签: pyspark pyspark-sql

AttributeError:“ DataFrame”对象没有属性“ _get_object_id”

enter image description here

1 个答案:

答案 0 :(得分:0)

首先:给我们一个reproducible数据框示例非常重要。没有人喜欢看屏幕截图来识别错误。

您的代码不起作用,因为spark无法确定groupby的行和初始数据框如何合并。它不知道NUM_TIERS是某种密钥。因此,您必须告诉spark应该使用哪一列来合并groupby和初始数据帧。

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

window函数:

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| 
+-------------+---------+---+