【问题标题】:Load Nested Parquet file in Pig?在 Pig 中加载嵌套 Parquet 文件?
【发布时间】:2016-03-28 09:53:31
【问题描述】:

parquet 文件是从 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);
 }

现在我无法理解加载此文件的等效猪模式。我正在使用parquet.pig.ParquetLoader。我做了以下转换:-

  1. 数组将被加载为chararray
  2. 如何加载嵌套数据? bid_info.creative_id 不起作用:mismatched input '.' expecting RIGHT_PAREN
  3. 我正在加载所有字段,无论是否可选。可选值应在 Pig 中加载为 null。

我还尝试使用没有任何显式架构的简单加载,然后出现此错误:

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

【问题讨论】:

    标签: apache-pig parquet


    【解决方案1】:

    正确的访问方法是使用. 运算符,如问题的第 2 点所示。它对我不起作用,因为我使用的是parquet.pig.ParquetLoader()。 Parquet for pig 现在已被 Apache 采用并具有最大的支持,因此我使用来自 maven 的 jar 并使用 org.apache.parquet.pig.ParquetLoader() 作为解析器。以下代码有效:-

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

    req_parquet 将是一个包含 5 个字段(Super1-5)的元组。字段 Super1,2,3 本身就是元组。 Super1.Field1Super1.Field2 本身就是一个元组包,其中数组中的每个元素都是元组。

    这很复杂,但对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-27
      • 2012-10-16
      • 1970-01-01
      相关资源
      最近更新 更多