我在Hive中有一张镶木地板桌子,上面有日期&时间戳字段。我现在想读这个表从spark,但它失败与parquet时间戳兼容性错误。
hive版本是1.2.1 &Spark版本为1.6.1
线程"main"异常java.lang.UnsupportedOperationException: Parquet不支持时间戳。看到蜂巢- 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")
hive表如下图所示。
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是指哪个Hive版本?确保它不是引用旧的Hive版本(<= Hive 0.13)。
首先检查Spark版本及其hive依赖版本(是否兼容)
如果spark版本和hive版本兼容,仍然出现错误,请检查以下内容:在spark配置中添加以下内容
A) spark.sql.hive.metastore.version 1.2.1
B) spark.sql.hive.metastore.jars builtin
如果你正在使用databricks集群,你可以将这些添加到集群配置中:Configuration
→Advanced Options
→Spark
→Spark Conf
1.2.x
版本新增支持