2016-03-28 130 views
0

从Avro文件创建地板文件。现在我需要在Pig中加载Parquet文件。以下是我从parquet-tools schema命令获得的架构。在Pig中加载嵌套Parquet文件?

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。我做了以下转变: -

  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; 
} 

回答

0

正确的方式来访问是使用.操作员在问题的点-2显示。它不适用于我,因为我使用的是parquet.pig.ParquetLoader()。现在已经为Apache采用了拼花地板,并且拥有最大的支持,所以我使用了 maven的罐子,并使用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本身就是一堆元组,其中数组中的每个元素都是元组。

这是相当复杂的,但为我工作。