【问题标题】:PySpark Outputting '01/01/0001' and '12/31/9999' Incorrectly in ParquetPySpark 在 Parquet 中错误地输出“01/01/0001”和“12/31/9999”
【发布时间】:2021-12-13 03:28:06
【问题描述】:

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

执行以下命令时

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 格式输出正确的日期时间值。

有人知道发生了什么吗?谢谢。

【问题讨论】:

  • 我无法重现此内容。您确定您正在阅读正确的镶木地板文件吗?
  • 你是如何读回数据的?这看起来与stackoverflow.com/questions/69458623/… 中讨论的问题非常相似

标签: apache-spark pyspark parquet


【解决方案1】:

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

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

(信用:How to save spark dataframe to parquet without using INT96 format for timestamp columns?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 2015-12-31
    • 1970-01-01
    • 2013-07-23
    • 2016-05-25
    相关资源
    最近更新 更多