在 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
进行分组并使用 COUNT
和 MIN
来获得所需的结果分别得到 continuous_counts
和 start_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。
如何找到字段的连续性和起始位置 输入就像
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
进行分组并使用 COUNT
和 MIN
来获得所需的结果分别得到 continuous_counts
和 start_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。