我收到以下错误: 解析期间出错。重复约束更具限制性:无法将所需的二进制MyTime类型合并为可选的二进制MyTime。 可能其中一个文件已损坏,但我不知道如何跳过它。
由于
答案 0 :(得分:1)
当读取模式中具有略微不同元数据的多个镶木地板文件时会发生这种情况。要么在一个目录中有一个混合的文件集合,要么你给LOAD
语句一个glob,并且在这方面混合了最终的文件集合。
不是在AS()
子句中指定模式或对加载器函数进行裸调用,解决方案是覆盖加载器函数的参数中的模式,如下所示:
data = LOAD 'data'
USING parquet.pig.ParquetLoader( 'n1:int, n2:float, n3:double, n4:long')
否则,loader函数会从它遇到的第一个文件中推断出架构,然后与其他文件冲突。
如果您仍然遇到问题,请尝试在架构规范中使用类型bytearray
,然后在后续FOREACH
中转换为所需的类型。
根据Parquet source code,加载器函数还有另一个参数,它允许按位置而不是名称(默认值)指定列,但我没有尝试过。