0

我收到以下错误:解析期间出错。重复约束更具限制性:不能将所需的二进制 MyTime 类型合并为可选的二进制 MyTime。也许其中一个文件已损坏,但我不知道如何跳过它。

谢谢

4

1 回答 1

2

当读取多个 parquet 文件时,会发生这种情况,这些文件的模式中元数据略有不同。要么在单个目录中有混合的文件集合,要么给LOAD语句提供一个 glob,结果文件集合在这方面是混合的。

解决方案不是在AS()子句中指定模式或对加载器函数进行裸调用,而是在加载器函数的参数中覆盖模式,如下所示:

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

否则,加载器函数从它遇到的第一个文件推断架构,然后与其他文件冲突。

如果您仍然遇到问题,请尝试bytearray在模式规范中使用类型,然后在后续的FOREACH.

根据Parquet 源代码,加载器函数还有另一个参数,它允许按位置而不是名称(默认)指定列,但我没有尝试过。

于 2015-08-28T16:56:44.997 回答