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

Fab*_*ich 3 avro apache-spark parquet

我有一个 spark 数据框,我想将它保存为 parquet,然后使用 parquet-avro 库加载它。

我的数据框中有一个时间戳列,它被转换为镶木地板中的 INT96 时间戳列。但是 parquet-avro不支持 INT96格式并抛出。

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

我目前使用

date_frame.write.parquet("path")
Run Code Online (Sandbox Code Playgroud)

Fab*_*ich 7

阅读火花代码我找到了spark.sql.parquet.outputTimestampType 属性

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")
Run Code Online (Sandbox Code Playgroud)