PySpark 在 Parquet 中错误地输出“01/01/0001”和“12/31/9999”

PySpark Outputting '01/01/0001' and '12/31/9999' Incorrectly in Parquet

我正在使用 PySpark 3.0.1 生成拼花文件。

执行以下命令时

sparkDF.write.mode("overwrite").parquet(file_name)

9999-12-31 00:00:00.0000000 日期时间在 parquet 文件中写为 1816-03-29 11:56:08.066277376

0001-01-01 00:00:00.0000000 日期时间在 parquet 文件中写为 1754-08-29 04:43:41.128654848

相比之下,sparkDF.write.mode("overwrite").csv(file_name) 以 CSV 格式输出正确的日期时间值。

有人知道这是怎么回事吗?谢谢。

我认为问题在于您正在使用的任何系统都可能会误解或在处理 int96 时间戳格式时出现溢出问题。你可以写一个更标准的格式为:

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

(来源: