如何计算pyspark表中的累积和

Posted

技术标签:

【中文标题】如何计算pyspark表中的累积和【英文标题】:how to calculate cumulative sum in a pyspark table 【发布时间】:2017-10-27 19:24:31 【问题描述】:

我在 pyspark 上有一个使用交叉表功能的表格,如下所示:

df = sqlContext.createDataFrame( [(1,2,"a"),(3,2,"a"),(1,3,"b"),(2,2,"a"),(2,3,"b")],
                             ["time", "value", "class"] )

tabla = df.crosstab("value","class")
tabla.withColumn("Total",tabla.a + tabla.b).show()


+-----------+---+---+-----+
|value_class|  a|  b|Total|
+-----------+---+---+-----+
|          2|  4|  0|    4|
|          4|  1|  2|    3|
|          3|  1|  4|    5|
+-----------+---+---+-----+

我需要聚合一个新列,该列指示“总计”的累积总和

【问题讨论】:

Python Spark Cumulative Sum by Group Using DataFrame的可能重复 【参考方案1】:

希望这会有所帮助:

我只是举了一个例子,但是你可以使用partitionBy,orderBy等来制作窗口。

from pyspark.sql.window import *
window = Window.partitionBy("value_class")
tabla = tabla.withColumn("CumSumTotal", sum(tabla.Total).over(window))

【讨论】:

嗨,我尝试了解决方案,但显示错误:回溯(最近一次调用最后一次):文件“”,第 1 行,在 文件“/opt/cloudera/parcels /CDH-5.8.5-1.cdh5.8.5.p0.5/lib/spark/python/pyspark/sql/column.py",第 243 行,在 iter 中引发 TypeError("Column is not iterable") TypeError: Column is not iterable 它可能是什么? 有一个小错字;应该是tabla = tabla.withColumn("CumSumTotal", sum(tabla.Total).over(window))

以上是关于如何计算pyspark表中的累积和的主要内容,如果未能解决你的问题,请参考以下文章

pyspark中的累积和

如何在pyspark数据框中找到没有分组的累积频率

Hive:通过 Hue 插入表格产生的文件数量与 pyspark 不同

Pyspark 有条件的累积和

Pyspark - 具有重置条件的累积和

Pyspark - 获取具有条件的列的累积总和