迭代猪的田地

时间:2013-06-20 19:52:52

标签: apache-pig

我的数据如下:

(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

我是猪的新手并没有太多想法。但是,我在想的是,

  1. 通过拆分属性字段
  2. 来创建元组
  3. 遍历元组中的每个字段,并检查它是否与地址匹配
    1. 如果匹配,则输出。
  4. 检查是否与国家/地区匹配
    1. 如果匹配,则输出
  5. 我想问一下,是否有任何方法可以迭代元组中的字段?或任何其他方式来解决这个任务。

    谢谢。

1 个答案:

答案 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