如何处理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
1条答案
按热度按时间km0tfn4u1#
您可以用多种语言将验证编写为pig udf
我通常返回相同的模式,并附加一个表示有效性的字段,然后过滤结果(一次用于登录错误日志,一次用于继续操作)