如何在不为时间戳列使用INT96格式的情况下将spark数据帧保存到拼花地板?

时间:2019-06-13 14:16:12

标签: apache-spark avro parquet

我有一个Spark数据框,我想保存为镶木地板,然后使用parquet-avro库加载它。

我的数据框中有一个时间戳列,该列在镶木地板中转换为INT96时间戳列。但是parquet-avro does not support INT96会格式化并抛出。

有办法避免吗?在avro支持的内容中将时间戳写入镶木地板时,是否可以更改Spark使用的格式?

我目前正在使用

date_frame.write.parquet("path")

1 个答案:

答案 0 :(得分:1)

阅读火花代码,我发现spark.sql.parquet.outputTimestampType property

  

spark.sql.parquet.outputTimestampType:
  设置Spark将数据写入Parquet文件时要使用的Parquet时间戳类型。
  INT96是Parquet中的非标准但常用的时间戳类型。
  TIMESTAMP_MICROS是Parquet中的标准时间戳类型,它存储从Unix纪元开始的微秒数。
  TIMESTAMP_MILLIS也是标准的,但是具有毫秒级的精度,这意味着Spark必须截断其时间戳值的微秒部分。

因此我可以执行以下操作:

spark.conf.set("spark.sql.parquet.outputTimestampType", "TIMESTAMP_MICROS")
data_frame.write.parquet("path")