我在Hive中具有日期&時間戳字段的實木複合地板表。我現在想從火花中讀取此表,但它會因拼花時間戳兼容性錯誤而失敗。從具有時間戳的實木複合地板表中讀取的火花
的蜂巢版本是1.2.1 &星火版本是1.6.1線程
異常「主要」 java.lang.UnsupportedOperationException:木地板不支持時間戳。見HIVE-6384 應用 在org.apache.hadoop.hive.ql.io.parquet.serde.ArrayWritableObjectInspector.getObjectInspector(ArrayWritableObjectInspector.java:98) 應用 在org.apache.hadoop.hive.ql.io。 parquet.serde.ArrayWritableObjectInspector。(ArrayWritableObjectInspector.java:60)
我試着從Hive上讀取,它工作得很好。但從Spark中讀取時失敗。這是試圖運行的查詢。
import org.apache.spark.sql.hive._
val sqlContext = new HiveContext(sc)
sqlContext.sql("select * from hivetablename limit 10")
配置單元表如下所示。
CREATE EXTERNAL TABLE hivetablename (col1 string, date_time timestamp, somedate date) PARTITIONED BY (load_date date)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 's3n://path'
任何建議或解決方法?
您使用的是什麼版本的配置單元和火花?你可以粘貼代碼給出這個錯誤 –
設置spark.sql.hive.convertMetastoreParquet confuguration爲false。當設置爲false時,Spark SQL將使用Hive SerDe來實現地板表,而不是內置支持。希望這可以解決你的問題。 –
Parquet的配置可以使用SQLContext上的setConf方法或使用SQL運行SET key = value命令來完成。 –