Spark中任意粒度的聚合
Aggregation with arbitrary granularity in Spark
我正在尝试使用这种简单的结构在 DataFrame 中进行一些聚合:
+--------------------+---------+---------+
| date| data1| data2|
+--------------------+---------+---------+
|2016-01-30 00:10:...| 0.0596| 0.5385|
|2016-01-30 00:20:...| 0.05578| 0.5385|
|2016-01-30 00:30:...| 0.03375| 0.5055|
|2016-01-30 00:40:...| 0.0379| 0.51266|
|2016-01-30 00:50:...| 0.05471| 0.5345|
|2016-01-30 01:00:...| 0.0926| 0.54833|
......
我需要聚合 (SUM) 数据 1 和数据 2,按日期分组,具有任意粒度(例如,每天、每小时、每周、12 小时...)。
我刚刚设法每天都这样做:
SELECT TO_DATE(date) as date, SUM(data1) as data1, SUM(data2) as data2
FROM my_table
GROUP BY TO_DATE(date)
这很好用,但我不知道如何实现其他聚合。
您可以尝试类似的方法:
SELECT concat(to_date(date), ':', hour(date)) as date_hour
...
GROUP BY date_hour
甚至
SELECT to_date(date), hour(date)
...
GROUP BY to_date(date), hour(date)
我正在尝试使用这种简单的结构在 DataFrame 中进行一些聚合:
+--------------------+---------+---------+
| date| data1| data2|
+--------------------+---------+---------+
|2016-01-30 00:10:...| 0.0596| 0.5385|
|2016-01-30 00:20:...| 0.05578| 0.5385|
|2016-01-30 00:30:...| 0.03375| 0.5055|
|2016-01-30 00:40:...| 0.0379| 0.51266|
|2016-01-30 00:50:...| 0.05471| 0.5345|
|2016-01-30 01:00:...| 0.0926| 0.54833|
......
我需要聚合 (SUM) 数据 1 和数据 2,按日期分组,具有任意粒度(例如,每天、每小时、每周、12 小时...)。
我刚刚设法每天都这样做:
SELECT TO_DATE(date) as date, SUM(data1) as data1, SUM(data2) as data2
FROM my_table
GROUP BY TO_DATE(date)
这很好用,但我不知道如何实现其他聚合。
您可以尝试类似的方法:
SELECT concat(to_date(date), ':', hour(date)) as date_hour
...
GROUP BY date_hour
甚至
SELECT to_date(date), hour(date)
...
GROUP BY to_date(date), hour(date)