循环遍历Pig中的元素以生成关系的新元组

时间:2014-12-18 07:32:21

标签: apache-pig

说我有如下关系:

(A, (1, 2, 3))
(B, (2, 3))

是否可以通过使用Pig Latin扩展bag元素来建立新关系?

(A, 1)
(A, 2)
(A, 3)
(B, 2)
(B, 3)

我尝试使用FOREACHGENERATE,但是在循环播放包元素时遇到了很难产生新元组的问题。

谢谢,

------------- 修改 -------------

这是一个示例输入:

A    1 2 3
B    2 3

用制表符分隔,然后用空格分隔。

我使用STRSPLIT来处理空格以生成元组。

raw_x = LOAD './sample.txt' using PigStorage('\t') AS (title:chararray, links:chararray);
data_x = FOREACH raw_x GENERATE title, STRSPLIT(links, '\\s+') AS links;

1 个答案:

答案 0 :(得分:1)

你能试试吗?

<强> input.txt中

A       1 2 3
B       2 3

<强> PigScript:

A = LOAD 'input.txt' USING PigStorage() AS (title:chararray,links:chararray);
B = FOREACH A GENERATE title,FLATTEN(TOKENIZE(links));
DUMP B;

<强>输出:

(A,1)
(A,2)
(A,3)
(B,2)
(B,3)