2013-06-20 106 views
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. 如果匹配,其輸出

我想問的是,如果有任何的方式來遍歷元組的領域?或者任何其他方式來解決這個任務。

謝謝。

回答

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_EXTRACThere

+0

謝謝@WinnieNicklaus。這是我想要的。 – bndg