scala - 由 spark 编写的 Parquet 文件中的 Athena/Hive 时间戳

标签 scala apache-spark amazon-s3 hive parquet

我们正在从 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/'

选择查询失败问题: HIVE_BAD_DATA:parquet 中的字段字类型 BINARY 与表模式中定义的类型时间戳不兼容

在使用普通 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 文件时,你能帮忙解决一下出了什么问题吗?

最佳答案

我认为这是 Hive 存储 Parquet 时间戳的一个众所周知的错误 in a way that is incompatible with other tools .在使用 Impala 检索我用 Spark 编写的 Hive 数据时,我遇到了类似的问题。我相信this was resolved在 Spark 2.3 中。

关于scala - 由 spark 编写的 Parquet 文件中的 Athena/Hive 时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50711525/

相关文章:

scala - 使用选项更新深层嵌套的案例类

memory-management - Spark 读取大文件

apache-spark - 将Spark与HDFS一起用作文件存储系统并将YARN用作资源管理器有什么优势?

python - Cloudfront 与 S3 签名 URL 和 Boto3

scala - 升级了spark版本,在spark作业中遇到java.lang.NoSuchMethodError : scala. Product.$init$(Lscala/Product;)V

java - Akka是否适合瞬时网络覆盖的系统?

hadoop - 输出状态为 : ACCEPTED in YARN MODE 的 Spark Hang

javascript - S3 替代方案,允许在不缓冲的情况下上传流文件

amazon-web-services - AWS(亚马逊网络服务)中的 keyName 是什么?

scala - 读取 trait 中的类型参数 Class Type