spark java 求和,pyspark的累加和

博客讨论了如何在存在重复行的情况下计算每个班级的累计总和。使用`sum().over()`窗口函数在Pandas或Spark DataFrame中通常有效,但不处理重复行。解决方案是结合`row_number()`对时间戳和值进行排序,确保在计算累积和时正确处理重复数据。
摘要由CSDN通过智能技术生成

我正在尝试计算每个班级的累计总和。通过使用sum(df.value).over(Window.partitionBy('class')。orderBy('time'))代码可以正常工作

df = sqlContext.createDataFrame( [(1,10,"a"),(3,2,"a"),(1,2,"b"),(2,5,"a"),(2,1,"b"),(9,0,"b"),(4,1,"b"),(7,8,"a"),(3,8,"b"),(2,5,"a"),(0,0,"a"),(4,3,"a")],

["time", "value", "class"] )

time|value|class|

+----+-----+-----+

| 1| 10| a|

| 3| 2| a|

| 1| 2| b|

| 2| 5| a|

| 2| 1| b|

| 9| 0| b|

| 4| 1| b|

| 7| 8| a|

| 3| 8| b|

| 2| 5| a|

| 0| 0| a|

| 4| 3| a|

df.withColumn('cumsum_value', sum(df.value).over(Window.partitionBy('class').orderBy('time'))).show()

time|value|class|cumsum_value|

+----+-----+-----+------------+

| 1| 2| b| 2|

| 2| 1| b| 3|

| 3| 8| b| 11|

| 4| 1| b| 12|

| 9| 0| b| 12|

| 0| 0| a| 0|

| 1| 10| a| 10|

| 2| 5| a| 20|

| 2| 5| a| 20|

| 3| 2| a| 22|

| 4| 3| a| 25|

| 7| 8| a| 33|

+----+-----+-----+------------+

但是它不适用于重复的行。所需的输出应为:

time|value|class|cumsum_value|

+----+-----+-----+------------+

| 1| 2| b| 2|

| 2| 1| b| 3|

| 3| 8| b| 11|

| 4| 1| b| 12|

| 9| 0| b| 12|

| 0| 0| a| 0|

| 1| 10| a| 10|

| 2| 5| a| 15|

| 2| 5| a| 20|

| 3| 2| a| 22|

| 4| 3| a| 25|

| 7| 8| a| 33|

+----+-----+-----+------------+

0

投票

添加到[@pault评论中,我建议根据row_number()进行orderBy('time', 'value')计算,然后在另一[C0]中使用该列window(orderBy)获取您的w2。

这将处理两种情况:时间相同且值相同,时间相同但值不相等。cum_sum

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值