Spark从具有时间戳的拼花hive表中读取数据



我在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集群,你可以将这些添加到集群配置中:ConfigurationAdvanced OptionsSparkSpark Conf

1.2.x版本新增支持

相关内容

  • 没有找到相关文章

最新更新