特定の列でグループ化したいデータがあります。グループのローリング時間ウィンドウに基づいて一連のフィールドを集計します。ここでSparkでグループとローリング時間ウィンドウを集計する方法
は、いくつかの例のデータである:
df = spark.createDataFrame([Row(date='2016-01-01', group_by='group1', get_avg=5, get_first=1),
Row(date='2016-01-10', group_by='group1', get_avg=5, get_first=2),
Row(date='2016-02-01', group_by='group2', get_avg=10, get_first=3),
Row(date='2016-02-28', group_by='group2', get_avg=20, get_first=3),
Row(date='2016-02-29', group_by='group2', get_avg=30, get_first=3),
Row(date='2016-04-02', group_by='group2', get_avg=8, get_first=4)])
私は、最も早い日付で開始し、時間ウィンドウを作成し、そのグループのエントリがないと、30日があるまで延長、group_by
によってグループ化します。 30日が過ぎると、次のウィンドウは、前のウィンドウにない次の行の日付から始まります。
次に、たとえば平均値がget_avg
になり、最初の結果がget_first
になるように集計したいとします。
だから、この例の出力は次のようになります。
group_by first date of window get_avg get_first
group1 2016-01-01 5 1
group2 2016-02-01 20 3
group2 2016-04-02 8 4
編集:申し訳ありませんが、私は私の質問が正しく指定されていません実現。私は実際には30日間の休止後に終了するウィンドウが欲しい。私はそれに応じて例のgroup2部分を修正しました。