2016-03-28 64 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本身就是一堆元組,其中數組中的每個元素都是元組。

這是相當複雜的,但爲我工作。