【发布时间】:2014-04-16 15:09:20
【问题描述】:
在 Hadoop 中,我有一个数据点集合,每个数据点都包含一个“startTime”和“endTime”,以毫秒为单位。我想在一个字段上进行分组,然后在开始/结束时间的意义上识别包中一个数据点与另一个数据点重叠的每个位置。例如,这里有一些数据:
0,A,0,1000
1,A,1500,2000
2,A,1900,3000
3,B,500,2000
4,B,3000,4000
5,B,3500,5000
6,B,7000,8000
我按如下方式加载和分组:
inputdata = LOAD 'inputdata' USING PigStorage(',')
AS (id:long, where:chararray, start:long, end:long);
grouped = GROUP inputdata BY where;
这里的理想结果是
(1,2)
(4,5)
我编写了一些糟糕的代码来每秒生成一个单独的元组并进行一些舍入,然后进行集合交集,但这似乎效率低下,实际上它仍然无法正常工作。我不想调试一个不好的方法,而是想研究一个好的方法。
我怎样才能合理有效地为重叠数据点获取像 (id1,id2) 这样的元组?
我非常乐意编写 Java UDF 来为我完成这项工作,但似乎 Pig 应该能够做到这一点,而无需求助于自定义 UDF。
【问题讨论】:
标签: hadoop apache-pig