即使使用 timestampFormat,PySpark 也无法推断时间戳

Tiz*_*ica 4 date-formatting apache-spark pyspark

我有这个 json 文件

{"created_at":"2022-01-02 12:17:43.399 UTC","updated_at":"2022-01-02 12:17:43.399 UTC"}
Run Code Online (Sandbox Code Playgroud)

尝试将其读作

read_df = spark \
            .read \
            .option("timestampFormat", "yyyy-MM-dd HH:mm:ss.SSS 'UTC'") \
            .option("inferSchema", "true") \
            .json(path)
Run Code Online (Sandbox Code Playgroud)

但推断的模式给了我返回

root
 |-- created_at: string (nullable = true)
 |-- updated_at: string (nullable = true)
Run Code Online (Sandbox Code Playgroud)

我尝试强制它通过withColumn("timestamp",to_timestamp(col("created_at"), "yyyy-MM-dd HH:mm:ss.SSS 'UTC'"))并且它有效。

我不想为自己提供架构,但让我们推断它,因为我有具有不同架构的不同文件,并且希望重新使用该函数进行读取。

我不确定出了什么问题。

Spark版本L 3.3.2

wer*_*ner 5

时间戳的推断必须显式启用(docs,code):

从3.0.1版本开始,默认禁用时间戳类型推断。将 JSON 选项 inferTimestamp 设置为 true 以启用此类类型推断。

read_df = spark \
            .read \
            .option("timestampFormat", "yyyy-MM-dd HH:mm:ss.SSS 'UTC'") \
            .option("inferSchema", "true") \
            .option("inferTimestamp", "true") \
            .json(path)
Run Code Online (Sandbox Code Playgroud)

返回两个时间戳列。