我有一个Spark数据框,我想保存为镶木地板,然后使用parquet-avro库加载它。
我的数据框中有一个时间戳列,该列在镶木地板中转换为INT96时间戳列。但是parquet-avro does not support INT96会格式化并抛出。
有办法避免吗?在avro支持的内容中将时间戳写入镶木地板时,是否可以更改Spark使用的格式?
我目前正在使用
date_frame.write.parquet("path")
答案 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")