2014-09-30 49 views
0

是否有可能編寫UDF功能,將做到以下中的foreach Hadoop的PIG定製的UDF方法產生循環

records = load INPUT using PigStorage() AS (vin:chararray , longString:chararray); 

simpleData = foreach records generate vin , myUdfFunctionGetValue(longString , 'someKey'); 

這裏longString被結構「鍵:值;鍵2:值2,someKey:值3 ... 。「

所以我需要解析longString並獲取被問到的鍵的值。我會錯誤的方向,這可能是在豬嗎?

回答

1

你可以用python UDF輕鬆做到這一點。

UDF:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

@outputSchema("output:chararray") 
def key_value_parser(s, k): 

    try: 
     d = dict([x.split(':') for x in s.split(';')]) 
     return d[k] 
    except: 
     return None 

豬:

REGISTER '/root/path/name_of_udf.py' USING jython as udf; 
data = LOAD 'input' USING PigStorage() AS (vin:chararray, longString:chararray); 
parsedString = FOREACH data GENERATE udf.key_value_parser(longString, 'key3'); 
DUMP parsedString; 

假設longString的形式爲key1:Value1;Key2:Value2;key3:Value3; ...

輸出:

(Value3) 
+0

謝謝我明天會測試這個,從來沒有用python編碼過,但這不應該是個問題,我只需要檢查我們的服務器是否安裝了python,我會讓你知道這看起來很有希望。 – BojanT 2014-10-01 02:12:05

+0

請注意,您需要安裝[Jython](http://www.jython.org/)。我假設你有豬,那麼你有Jython。 – gobrewers14 2014-10-01 03:08:45