2013-09-24 31 views
0

我的關係(A)的元組描述如下: {a:int,b:int,c:map []} 該地圖只包含一個chararray,但密鑰不可預測。例如,我的元組的樣品是:我想將地圖轉換成豬拉丁文字段中的字段

(1, 100, [key.152#hello]) 
(8, 110, [key.3000#bonjour]) 
(5, 103, [key.1#hallo]) 
(5, 103, []) 
(8, 104, [key.11#buenosdias]) 
... 

我想我的關係(A)轉變成乙關係所以乙描述將是: {A:整數,B:INT,C: chararray}

隨着我的樣本,它會給:

(1, 100, hello) 
(8, 110, bonjour) 
(5, 103, hallo) 
(8, 104, buenosdias) 
... 

(我要過濾空地圖太)

任何想法?

謝謝。

+1

可在嘗試寫入該提取映射值的自定義UDF。類似的答案:http://stackoverflow.com/a/12542753/1050422 –

+0

我寫了我自己的UDF,它完美的工作,謝謝你。 – MarAja

回答

2

雖然編寫UDF是正確的解決方案,但如果您想快速破解以下解決方案,那麼使用Regex可能會有所幫助。

A = LOAD 'sample.txt' as (a:int, b:int, c:chararray); 
B = FOREACH A GENERATE a, b, FLATTEN(STRSPLIT(c, '#', 2)) as (key:chararray, value:chararray); 
C = FOREACH B GENERATE a, b, FLATTEN(STRSPLIT(value, ']', 2)) as (value:chararray, ignore:chararray); 
D = FILTER C BY value is not null; 
E = FOREACH D GENERATE a, b, value; 
STORE E INTO 'output/E'; 

對於樣品輸入

1  100  [key.152#hello] 
8  110  [key.3000#bonjour] 
5  103  [key.1#hallo] 
5  103  [] 
8  104  [key.11#buenosdias] 

以上代碼生成以下輸出:

1  100  hello 
8  110  bonjour 
5  103  hallo 
8  104  buenosdias 
+0

+1由於[地圖不能轉換爲任何東西](http://pig.apache.org/docs/r0.10.0/basic.html#cast),這隻能用於加載。 – mr2ert