apache pig,验证输入

qkf9rpyu  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(270)

如何处理apachepig脚本中的坏记录。在我的例子中,我正在处理一个逗号分隔的文件,通常每行有14个字段。
但有时该行包含一个\n并且该记录被拆分为两行,并且我的pig脚本无法将此记录和之后的所有记录插入hbase。
问题是udf中的Map长度总是3。可能是因为pig脚本中定义的模式。如何确定一条记录的字段数是否等于该模式。。。
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;

自定义项

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
km0tfn4u

km0tfn4u1#

您可以用多种语言将验证编写为pig udf
我通常返回相同的模式,并附加一个表示有效性的字段,然后过滤结果(一次用于登录错误日志,一次用于继续操作)

相关问题