在foreach生成循环中的Hadoop PIG自定义UDF方法

时间:2014-09-30 12:32:49

标签: java hadoop apache-pig

是否可以编写将执行以下操作的UDF函数

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

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

这里longString是结构" key:Value; key2:Value2,someKey:Value3 ...."

所以我需要解析longString并获取ask key的值。我是否会走向错误的方向,这在PIG中是否可行?

1 个答案:

答案 0 :(得分: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)