天天看點

HIVE出現“ java.lang.UnsupportedOperationException”的解決辦法

在HIVE中執行如下語句:

提示如下錯誤:

Failed with exception java.io.IOException:org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.UnsupportedOperationException: Cannot inspect org.apache.hadoop.hive.serde2.io.DoubleWritable
           

檢視“test”表結構,發現是parquet存儲格式,難道parquet不支援double?自己都要被自己的結論給驚呆了,查閱官方文檔,果然不存在這麼驚人的結論!

在網上搜尋一番,也沒發現有用的結論,于是切換到spark-sql用戶端,依舊出錯,但錯誤資訊更多。

Caused by: java.lang.UnsupportedOperationException: Cannot inspect org.apache.hadoop.hive.serde2.io.DoubleWritable
        at org.apache.hadoop.hive.ql.io.parquet.serde.primitive.ParquetStringInspector.getPrimitiveJavaObject(ParquetStringInspector.java:77)
           

但依舊沒什麼鳥用,突然想起,是不是類型轉換錯誤,于是對比parquet寫入的類聲明與表聲明,發現如下差異:

類聲明 表聲明
Double string

于是執行修改表語句:

提示無法将“StringType”改為“DoubleType”,無奈之下,隻好删除重建,問題解決。

其他

在這個表建立後,我執行了大量的“group by”語句,一直工作非常良好,但偶然需要擷取樣本資料時,才發現問題,是以測試資料的品質時,别忘了試試“select * from”語句,能檢驗字段的合法性。

繼續閱讀