2016-01-20 19 views
8

我試圖在包含兩個Parquet文件的文件夾上創建一個包含模式 string,string,double的Hive表。第一個parquet文件架構是字符串,字符串,雙重,第二個文件的架構是 string,double,string在Pig中使用配置單元表實現

CREATE EXTERNAL TABLE dynschema (
trans_date string, 
currency string, 
rate double) 
STORED AS PARQUET 
LOCATION '/user/impadmin/test/parquet/evolution/'; 

我想在豬(0.14)腳本中使用配置單元表。

A = LOAD 'dynschema' USING org.apache.hive.hcatalog.pig.HCatLoader(); 

DUMP A; 

但我得到的錯誤

java.lang.UnsupportedOperationException:不能檢查org.apache.hadoop.hive.serde2.io.DoubleWritable

我懷疑是由於到第二個文件的模式與表模式不同,因爲第一個文件的拆分已成功讀取,但在讀取第二個文件的拆分時發生此異常。

我還調查了HCatRecordReader's代碼,發現這一段代碼

DefaultHCatRecord dr = new DefaultHCatRecord(outputSchema.size()); 
    int i = 0; 
    for (String fieldName : outputSchema.getFieldNames()) { 
    if (dataSchema.getPosition(fieldName) != null) { 
     dr.set(i, r.get(fieldName, dataSchema)); 
    } else { 
     dr.set(i, valuesNotInDataCols.get(fieldName)); 
    } 
    i++; 
    } 

在這裏,我看到有從數據模式的輸出的模式轉換的邏輯,但在調試時,我發現有在架構中都沒有區別。

請幫我找到,如果從蜂巢表中讀取數據的

  1. 豬支持這樣的情況下創造了超過多個拼花文件與不同的模式。

  2. 如果是的話,該怎麼做。

+0

如果您知道該模式,則可以使用Pig Parquet加載器來讀取文件並手動指定應該觸發架構演變的模式。我不確定它是否會對這個具體情況有所幫助,但是由於架構演變似乎很難做到。 – LiMuBei

+0

Avro的情況也是如此嗎? – SaurabhG

+0

不知道如何豬存儲工作。我認爲你也可以手動指定一個模式。 – LiMuBei

回答

1

如果你有2種不同的模式文件,下面似乎是明智的:

  1. 分手了文件的基礎上,他們有哪些架構
  2. 使表脫離他們的
  3. 如果需要,加載單個表格並將它們存儲爲一個超類型