我在Hive有一张镶木桌子,里面有日期&时间戳字段。我现在想从火花上读取这个表,但它因镶木地板时间戳兼容性错误而失败。
蜂巢版本为1.2.1& Spark版本是1.6.1
线程“main”中的异常java.lang.UnsupportedOperationException:Parquet不支持时间戳。见HIVE-6384 应用 at 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'
有任何建议或解决方法吗?
答案 0 :(得分:1)
快速检查一下,请查看您的Spark所指的Hive版本?确保它不是指较旧的Hive版本(< = Hive 0.13)。
答案 1 :(得分:1)
首先检查Spark版本及其蜂巢依赖版本(是否兼容)
如果spark版本和hive版本都兼容,但仍然出现错误,请检查以下内容:
在您的spark配置中添加以下内容
a)spark.sql.hive.metastore.version 1.2.1
b)内置spark.sql.hive.metastore.jars
如果您正在使用数据块集群,则可以将它们添加到集群配置中:
Configuration
-> Advanced Options
-> Spark
-> Spark Conf
添加了对1.2.x
版本的支持