Apache pig ApachePig:将属性列表合并到单个元组中
我接收表单中的数据Apache pig ApachePig:将属性列表合并到单个元组中,apache-pig,Apache Pig,我接收表单中的数据 id1|attribute1a,attribute1b|attribute2a|attribute3a,attribute3b,attribute3c.... id2||attribute2b,attribute2c|.. 我正试图将它合并到一个表单中,在这个表单中,我有一个id字段的元组包,后面是一个元组,其中包含合并在一起的所有其他字段的列表 (id1,(属性1A、属性1B、属性2A、属性3A、属性3B、属性3C…) (id2,(属性2B,属性2C…) 现在我把它取出来
id1|attribute1a,attribute1b|attribute2a|attribute3a,attribute3b,attribute3c....
id2||attribute2b,attribute2c|..
我正试图将它合并到一个表单中,在这个表单中,我有一个id字段的元组包,后面是一个元组,其中包含合并在一起的所有其他字段的列表
(id1,(属性1A、属性1B、属性2A、属性3A、属性3B、属性3C…)
(id2,(属性2B,属性2C…)
现在我把它取出来
my_data = load '$input' USING PigStorage(|) as
(id:chararray, attribute1:chararray, attribute2:chararray)...
然后我尝试了扁平化、标记化、生成、TOTUPLE、bagcontat等所有组合,将其按摩成我想要的形式,但我对pig还不熟悉,就是想不出来。有人能帮忙吗?任何开源UDF库都是公平的。将每一行作为一个完整的字符串加载,然后使用内置的
STRPLIT
UDF的功能来实现所需的结果。这依赖于属性列表中没有选项卡,并假设在分离不同属性时不会对|
和,
进行任何不同的处理。另外,我修改了您的输入,以显示更多的边缘情况
input.txt
:
id1|attribute1a,attribute1b|attribute2a|,|attribute3a,attribute3b,attribute3c
id2||attribute2b,attribute2c,|attribute4a|,attribute5a
测试清管器
:
my_data = LOAD '$input' AS (str:chararray);
split1 = FOREACH my_data GENERATE FLATTEN(STRSPLIT(str, '\\|', 2)) AS (id:chararray, attr:chararray);
split2 = FOREACH split1 GENERATE id, STRSPLIT(attr, '[,|]') AS attributes;
DUMP split2;
(id1,(attribute1a,attribute1b,attribute2a,,,attribute3a,attribute3b,attribute3c))
(id2,(,attribute2b,attribute2c,,attribute4a,,attribute5a))
pig的输出-x local-p input=input.txt test.pig
:
my_data = LOAD '$input' AS (str:chararray);
split1 = FOREACH my_data GENERATE FLATTEN(STRSPLIT(str, '\\|', 2)) AS (id:chararray, attr:chararray);
split2 = FOREACH split1 GENERATE id, STRSPLIT(attr, '[,|]') AS attributes;
DUMP split2;
(id1,(attribute1a,attribute1b,attribute2a,,,attribute3a,attribute3b,attribute3c))
(id2,(,attribute2b,attribute2c,,attribute4a,,attribute5a))