web-dev-qa-db-ja.com

Python Spark DataFrameを使用したグループごとの累積合計

DataFrameabstraction;を具体的に使用して、グループごとの累積合計を計算するにはどうすればよいですか。およびPySpark

次のようなデータセットの例:

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

(順序付けられた)value変数のclassグループごとにtimeの累積合計列を追加したいと思います。

18
mr kw

これは、次のように、ウィンドウ関数とウィンドウの範囲内の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|
+----+-----+-----+-------+
44
mr kw