athena/hive时间戳

9q78igpj  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(346)

我们正在从spark写文件,从athena/hive读文件。我们在使用配置单元时遇到时间戳问题。

scala> val someDF = Seq((8, "2018-06-06 11:42:43")).toDF("number", "word")
someDF: org.apache.spark.sql.DataFrame = [number: int, word: string]

scala> someDF.coalesce(1).write.mode("overwrite").option("delimiter", "\u0001").save("s3://test/")

这创建了一个Parquet文件,我创建了一个表

CREATE EXTERNAL TABLE `test5`(
  `number` int, 
  `word` timestamp)
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY '\u0001' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
  's3://test/'

select查询失败,问题为:配置单元\错误\数据:Parquet中字段字的类型二进制与表架构中定义的类型时间戳不兼容
使用纯csv文件进行测试时,同样的情况也会发生。

scala>someDF.coalesce(1).write.format("com.databricks.spark.csv").mode("overwrite").option("delimiter", "\u0001").save("s3://test")

Table:
CREATE EXTERNAL TABLE `test7`(
  `number` int, 
  `word` timestamp)
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY '\u0001' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://test/'

当我们把它写成Parquet文件的时候,你能帮我们解决什么问题吗。

w3nuxt5m

w3nuxt5m1#

我认为这是一个众所周知的错误,Hive存储Parquet时间戳的方式与其他工具不兼容。在使用impala检索我用spark编写的Hive数据时,我遇到了类似的问题。我相信spark 2.3解决了这个问题。

相关问题