从Avro文件创建镶木地板文件。现在我需要在Pig中加载Parquet文件。以下是我从parquet-tools schema
命令获得的模式。
message Logs {
optional group SUPER1 {
optional group FIELD1 (LIST) {
repeated int32 array;
}
optional group FIELD2 (LIST) {
repeated int32 array;
}
}
optional group SUPER2 {
optional int32 FIELD1;
optional binary FIELD2 (UTF8);
optional double FIELD3;
optional int32 FIELD4;
optional double FIELD5;
optional binary FIELD6 (UTF8);
}
optional group SUPER3 {
required int32 FIELD1;
required int32 FIELD2;
optional binary FIELD3 (UTF8);
optional binary FIELD4 (UTF8);
}
required binary SUPER4 (UTF8);
optional binary SUPER5 (UTF8);
}
现在我无法理解加载此文件的等效pig模式。我正在使用parquet.pig.ParquetLoader
。我做了以下转换: -
chararray
mismatched input '.' expecting RIGHT_PAREN
我也尝试过使用简单加载而没有任何显式模式,然后我收到了这个错误:
Failed to parse: Invalid list type optional group FIELD1 (LIST) {
repeated int32 array;
}
答案 0 :(得分:0)
正确的访问方式是使用.
运算符,如问题第2点所示。它不起作用,因为我使用的是parquet.pig.ParquetLoader()
。现在,Apache的Parquet已被Apache采用,并且拥有最大的支持,所以我使用 maven的jar并使用org.apache.parquet.pig.ParquetLoader()
作为解析器。以下代码有效: -
log_parquet = LOAD 'logs' USING org.apache.parquet.pig.ParquetLoader();
req_parquet将是一个包含5个字段(Super1-5)的元组。 Fields Super1,2,3本身就是元组。 Super1.Field1
和Super1.Field2
本身就是一个元组包,其中数组中的每个元素都是元组。
这很复杂,但对我有用。