在pig中加载嵌套的parquet文件?

qxgroojn  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(489)

Parquet文件是从avro文件创建的。现在我需要把Parquet锉装进Pig。下面是我从 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 . 我做了以下的转换ormations:-
数组将作为 chararray 如何加载嵌套数据?bid\u info.creative\u id无效: mismatched input '.' expecting RIGHT_PAREN 我正在加载所有字段,无论是否可选。可选值应在pig中加载为null。
我也尝试过在没有任何显式模式的情况下使用简单加载,然后出现以下错误:

Failed to parse: Invalid list type optional group FIELD1 (LIST) {
  repeated int32 array;
}
o2rvlv0m

o2rvlv0m1#

正确的访问方式是使用 . 运算符,如问题的第2点所示。因为我在使用 parquet.pig.ParquetLoader() . parquetforpig现在已经被apache采用,并且具有最大的支持,所以我使用了maven的jar和 org.apache.parquet.pig.ParquetLoader() 作为解析器。下列代码worked:-

log_parquet = LOAD 'logs' USING org.apache.parquet.pig.ParquetLoader();

请求Parquet将是一个包含5个字段的元组(super1-5)。字段super1、2、3本身就是元组。 Super1.Field1 以及 Super1.Field2 它本身就是一个元组包,数组中的每个元素都是元组。
这很复杂,但对我有用。

相关问题