在 Pig 中查找元素的连续性

Find continuity of elements in Pig

如何找到字段的连续性和起始位置 输入就像

A-1
B-2
B-3
B-4
C-5
C-6

我想要的输出是

A,1,1
B,3,2
C,2,5

谢谢。

分组并计算 continous_counts 的值的数量。即

A,1
B,3
C,2

获取每个值的第一行。即

A,1
B,2
C,5

将以上两个关系连接起来,得到想要的输出。

A = LOAD 'data.txt' USING PigStorage('-') AS (value:chararray;index:int);
B = GROUP A BY value;
C = FOREACH B GENERATE group as value,COUNT(A.value) as continuous_counts;
D = FOREACH B {
    ordered = ORDER B BY index;
    first = LIMIT ordered 1;
    GENERATE first.value,first.index;
    }
E = JOIN C BY value,D BY value;
F = FOREACH E GENERATE C::value,C::continuous_counts,D::index;
DUMP F; 

假设您没有关于 value 的不连续数据,您可以通过首先对 value 进行分组并使用 COUNTMIN 来获得所需的结果分别得到 continuous_countsstart_index

A = LOAD 'data' USING PigStorage('-') AS (value:chararray;index:int);

B = FOREACH (GROUP A BY value) GENERATE
    group as value,
    COUNT(A) as continuous_counts,
    MIN(A.value) as start_index;

STORE B INTO 'output' USING PigStorage(',');

如果您的数据确实存在不连续数据的可能性,则解决方案在 native pig 中不再微不足道,您可能需要为此编写一个 UDF。