parquetloader:不能使用pig加载多个Parquet文件

iqjalb3h  于 2021-06-25  发布在  Pig
关注(0)|答案(1)|浏览(376)

我得到以下错误:解析时出错。重复约束更具限制性:不能将类型必需的binary mytime合并到可选的binary mytime中。也许其中一个文件被破坏了,但我不知道如何跳过它。
谢谢

wtzytmuj

wtzytmuj1#

当读取多个parquet文件时会发生这种情况,这些文件的模式中的元数据略有不同。或者您在一个目录中有一个混合的文件集合,或者您正在给 LOAD 在这方面,glob语句和生成的文件集合是混合的。
而不是在 AS() 子句或对加载器函数进行裸调用解决方案是重写加载器函数参数中的模式,如下所示:

data = LOAD 'data' 
    USING parquet.pig.ParquetLoader( 'n1:int, n2:float, n3:double, n4:long')

否则,loader函数从它遇到的第一个文件中推断出模式,该文件随后与其他文件之一冲突。
如果您仍然有困难,请尝试使用类型 bytearray 然后在随后的 FOREACH .
根据parquet源代码,loader函数还有另一个参数,它允许按位置而不是名称(默认值)指定列,但我没有尝试过。

相关问题