我的数据如下:
(000001, mfp=621|mdus=4.0|mduc=5.0|mas=1|mpc=4.0|mfn=1|country=ABC)
(00002, address=1000+mity|mus=1|name=kailtig+bksyt|mas=1|mpc=4.977552|country=ABC)
第一个字段是标识符,第二个字段包含一组属性。属性字段不一致,即,它有时可能包含地址属性,有时不包含地址属性。
我需要做的是每个标识符,我必须找到属性字段是否包含地址和/ country国家/地区,并输出如下输出:
000001, ,country=ABC
00002,address=105000+myCity,country=ABC
我是猪的新手并没有太多想法。但是,我在想的是,
我想问一下,是否有任何方法可以迭代元组中的字段?或任何其他方式来解决这个任务。
谢谢。
答案 0 :(得分:3)
使用正则表达式提取所需的字段。你也可以编写一个UDF来将你的结构转换成一个地图,但在这种情况下这可能有点过头了。
DUMP A;
(000001, mfp=621|mdus=4.0|mduc=5.0|mas=1|mpc=4.0|mfn=1|country=ABC)
(00002, address=1000+mity|mus=1|name=kailtig+bksyt|mas=1|mpc=4.977552|country=ABC)
DESCRIBE A;
{(id:chararray, attributes:chararray)}
B =
FOREACH A
GENERATE
id,
REGEX_EXTRACT(attributes, 'address=[^|]+', 0),
REGEX_EXTRACT(attributes, 'country=[^|]+', 0);
请参阅REGEX_EXTRACT
here。