【问题标题】:Apache PIG, validate inputApache PIG,验证输入
【发布时间】:2014-11-20 22:12:54
【问题描述】:

如何处理 Apache PIG 脚本中的不良记录。就我而言,我正在处理一个逗号分隔的文件,通常每行有 14 个字段。

但有时该行包含一个 \n 并且记录被分成两行,我的 PIG 脚本无法将此记录和之后的所有记录插入 HBase。

问题在于 UDF 中映射的长度始终为 3。可能是因为 PIG 脚本中定义的架构。如何确定记录的字段数是否等于架构...

REGISTER 'files.py' using jython as myfuncs

A = LOAD '/etl/incoming/test.txt' USING PigStorage(',') AS (name:chararray, age:int, gpa:float);

B = FOREACH A {
    GENERATE
    myfuncs.checkFormat(TOTUPLE(*)) as fields;
}

DUMP B;

UDF

import org.apache.pig.data.DataType as DataType
import org.apache.pig.impl.logicalLayer.schema.SchemaUtil as SchemaUtil

@outputSchema("record:map[]")
def checkFormat(record):
    print(type(record))
    print(record)

    record = list(record)

    print("length: %d" % len(record)) #always return 3

    return record

【问题讨论】:

    标签: error-handling apache-pig


    【解决方案1】:

    您可以在a variety of languages 中将验证编写为 Pig UDF

    我通常返回相同的模式,并带有一个表示有效性的附加字段,然后过滤结果(一次用于登录错误日志,一次用于继续操作)

    【讨论】:

    • 感谢您的回复。是否可以将完整记录发送到 UDF,还是必须将每个字段作为单独的参数发送?
    • 您可以发送所有以*为参数的记录:FOREACH A GENERATE myUDF(*);
    • 将 A 的架构更改为包含所有 14 个字段 - 仅在验证后投影到您需要的 3 个字段
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    相关资源
    最近更新 更多