我在Hive中具有日期&时间戳字段的实木复合地板表。我现在想从火花中读取此表,但它会因拼花时间戳兼容性错误而失败。从具有时间戳的实木复合地板表中读取的火花
的蜂巢版本是1.2.1 &星火版本是1.6.1线程
异常“主要” java.lang.UnsupportedOperationException:木地板不支持时间戳。见HIVE-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")
配置单元表如下所示。
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.sql.hive.convertMetastoreParquet confuguration为false。当设置为false时,Spark SQL将使用Hive SerDe来实现地板表,而不是内置支持。希望这可以解决你的问题。 –
Parquet的配置可以使用SQLContext上的setConf方法或使用SQL运行SET key = value命令来完成。 –