Spark从具有时间戳的镶木地板蜂巢表读取

时间:2016-09-29 21:26:14

标签: apache-spark apache-spark-sql parquet

我在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'

有任何建议或解决方法吗?

2 个答案:

答案 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版本的支持