猪和解析问题
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=v2
和 K3=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)
我正在尝试找出在具有混合定界符的数据集中使用 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=v2
和 K3=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)