猪和解析问题

Pig and Parsing issue

我正在尝试找出在具有混合定界符的数据集中使用 Pig 解析键值对的最佳方法,如下所示

我的样本数据集格式如下

 a|b|c|k1=v1 k2=v2 k3=v3

我在这里需要的最终输出是

k1,v1,k2,v2,k3,v3

我想这样做的一种方法是

A = load 'sample' PigStorage('|') as (a1,b1,c1,d1);
B = foreach A generate d1;

这里我得到 B 的 (k1=v1 k2=v2 k3=v3) 有什么方法可以让我通过 "" 进一步解析它以获得 3 个字段 k1=v1,k2=v2K3=v3 然后可以使用 Strsplit 和 Flatten 在 "=".

感谢您的帮助!

如果您事先知道每条记录中有多少个键=值对,试试这个:

A = load 'sample' PigStorage('|') as (a1,b1,c1,d1);

B = foreach A generate d1;

C = FOREACH B GENERATE STRSPLIT([=10=],'=',6);  -- 6= no. of key=value pairs

D = FOREACH C GENERATE FLATTEN([=10=]);

DUMP D

输出: (k1,v1,k2,v2,k3,v3)

如果您不知道键=值对的编号,请使用“ ”作为分隔符并从 $0 列中删除不需要的前缀。

A = LOAD 'sample' USING PigStorage(' ') as (a:chararray,b:chararray,c:chararray);

B = FOREACH A GENERATE STRSPLIT(SUBSTRING(a, LAST_INDEX_OF(a,'|')+1, (int)SIZE(a)),'=',2),STRSPLIT(b,'=',2),STRSPLIT(c,'=',2);

C = FOREACH B GENERATE FLATTEN([=11=]), FLATTEN(), FLATTEN();

DUMP C;

输出: (k1,v1,k2,v2,k3,v3)