2017-08-29 17 views
2

DataFrameabstractionを使用してグループごとの累積合計を具体的に計算するにはどうすればよいですか。そしてPySparkに?例えば、データセットにPython Spark DataFrameを使用するグループ別の累積合計

は次のように

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

+----+-----+-----+ 
|time|value|class| 
+----+-----+-----+ 
| 1| 2| a| 
| 3| 2| a| 
| 1| 3| b| 
| 2| 2| a| 
| 2| 3| b| 
+----+-----+-----+ 

Iは、(順序付け)time可変上グループ毎classためvalueの累積合計列を追加したいです。

答えて

6

これは次のように窓関数の組み合わせと、ウィンドウの範囲内Window.unboundedPreceding値を使用して行うことができる。

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

windowval = (Window.partitionBy('class').orderBy('time') 
      .rangeBetween(Window.unboundedPreceding, 0)) 
df_w_cumsum = df.withColumn('cum_sum', F.sum('value').over(windowval)) 
df_w_cumsum.show() 
+----+-----+-----+-------+ 
|time|value|class|cum_sum| 
+----+-----+-----+-------+ 
| 1| 3| b|  3| 
| 2| 3| b|  6| 
| 1| 2| a|  2| 
| 2| 2| a|  4| 
| 3| 2| a|  6| 
+----+-----+-----+-------+ 
関連する問題