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)