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

标签 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 并获取询问键的值。我会走错方向吗?这在 PIG 中可能吗?

最佳答案

您可以使用 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

pig :

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)

关于java - foreach 生成循环中的 Hadoop PIG 自定义 UDF 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26120971/

相关文章:

java - 在android中调用自定义类/方法

java - 进度对话框显示在错误的 fragment 中,并且在滑动选项卡时无法传递数据

java - 非法状态异常 : finishBroadcast() called outside of a broadcast

java - 如何获取 JAVA 中的真实类型/mime 类型(如 PHP 中的 finfo\mime_content_type)?

hadoop - 使用非重叠查询并行插入配置单元表

maven - 带有HBase(版本0.94.18)的Hadoop(版本2.4)的POM条目

hadoop - 如何在 oozie 协调器中使用一天的旧数据集

hadoop - ifile EBADF : Bad file descriptor while performing matrix addition 上的预读失败

eclipse - PigPen Eclipse 设置

hadoop - 如何使用 Hadoop MapReduce 索引一个非常大的图?