Spark 从具有时间戳的镶木地板蜂巢 table 中读取
Spark read from parquet hive table having timestamp
我在 Hive 中有一个镶木地板 table,它有日期和时间戳字段。我现在想从 over spark 中读取这个 table,但它因镶木地板时间戳兼容性错误而失败。
Hive版本为1.2.1 & Spark版本为1.6.1
Exception in thread "main" java.lang.UnsupportedOperationException: Parquet does not support timestamp. See HIVE-6384
App
at org.apache.hadoop.hive.ql.io.parquet.serde.ArrayWritableObjectInspector.getObjectInspector(ArrayWritableObjectInspector.java:98)
App
at 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")
配置单元 table 如下所示。
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 Version及其hive依赖版本(是否兼容)
如果 spark 版本和 hive 版本兼容但仍然出现错误,请检查以下内容:
在您的 spark 配置中添加以下内容
a) spark.sql.hive.metastore.version 1.2.1
b) spark.sql.hive.metastore.jars 内置
如果您使用的是 Databricks 集群,您可以将这些添加到集群配置中:
Configuration
->Advanced Options
->Spark
->Spark Conf
已添加对 1.2.x
版本的支持
我在 Hive 中有一个镶木地板 table,它有日期和时间戳字段。我现在想从 over spark 中读取这个 table,但它因镶木地板时间戳兼容性错误而失败。
Hive版本为1.2.1 & Spark版本为1.6.1
Exception in thread "main" java.lang.UnsupportedOperationException: Parquet does not support timestamp. See HIVE-6384 App at org.apache.hadoop.hive.ql.io.parquet.serde.ArrayWritableObjectInspector.getObjectInspector(ArrayWritableObjectInspector.java:98) App at 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")
配置单元 table 如下所示。
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 Version及其hive依赖版本(是否兼容)
如果 spark 版本和 hive 版本兼容但仍然出现错误,请检查以下内容:
在您的 spark 配置中添加以下内容
a) spark.sql.hive.metastore.version 1.2.1
b) spark.sql.hive.metastore.jars 内置
如果您使用的是 Databricks 集群,您可以将这些添加到集群配置中:
Configuration
->Advanced Options
->Spark
->Spark Conf
已添加对 1.2.x
版本的支持