0

我的数据如下:

(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)

第一个字段是一个标识符,而第二个字段包含一组属性。属性字段不一致,即有时可能包含地址属性,有时不包含。

我要做的是对于每个标识符,我必须查找属性字段是否包含地址和/国家/地区,并且我的输出如下:

 000001, ,country=ABC
 00002,address=105000+myCity,country=ABC

我是猪新手,没有太多想法。但是,我当时的想法是,

  1. 通过拆分属性字段创建一个元组,
  2. 遍历元组中的每个字段,并检查它是否与地址匹配
    1. 如果匹配,则输出。
  3. 检查它是否匹配国家
    1. 如果匹配,则输出

我想问是否有任何方法可以遍历元组中的字段?或任何其他解决此任务的方法。

谢谢你。

4

1 回答 1

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 这里

于 2013-06-20T20:55:35.273 回答