我有一个数据集,A
它有时间戳、访问者、URL:
(2012-07-21T14:00:00.000Z, joe, hxxp:///www.aaa.com)
(2012-07-21T14:01:00.000Z, mary, hxxp://www.bbb.com)
(2012-07-21T14:02:00.000Z, joe, hxxp:///www.aaa.com)
我想在 10 分钟的时间窗口内测量每个 URL 的每个用户的访问次数,但作为一个按分钟递增的滚动窗口。输出将是:
(2012-07-21T14:00 to 2012-07-21T14:10, joe, hxxp://www.aaa.com, 2)
(2012-07-21T14:01 to 2012-07-21T14:11, joe, hxxp://www.aaa.com, 1)
为了使算术简单,我将时间戳更改为一天中的分钟,如下所示:
(840, joe, hxxp://www.aaa.com) /* 840 = 14:00 hrs x 60 + 00 mins) */
为了通过移动时间窗口迭代“A”,我创建了一个包含一天中分钟数的数据集 B:
(0)
(1)
(2)
.
.
.
.
(1440)
理想情况下,我想做类似的事情:
A = load 'dataset1' AS (ts, visitor, uri)
B = load 'dataset2' as (minute)
foreach B {
C = filter A by ts > minute AND ts < minute + 10;
D = GROUP C BY (visitor, uri);
foreach D GENERATE group, count(C) as mycnt;
}
DUMP B;
我知道在“FOREACH”循环中不允许使用“GROUP”,但是否有解决方法可以达到相同的结果?
谢谢!