Pyspark 将带有日期和月份名称的日期时间字段解析为时间戳
Pyspark parse datetime field with day and month names into timestamp
我什至不知道从哪里开始。我想将当前为字符串的列解析为时间戳。记录如下所示:
Thu, 28 Jan 2021 02:54:17 +0000
将其解析为时间戳的最佳方法是什么?我什至不确定从哪里开始,因为它不是存储日期的超级常用方法
您或许可以从文档开始 Datetime Patterns for Formatting and Parsing:
import pyspark.sql.functions as F
df = spark.createDataFrame([("Thu, 28 Jan 2021 02:54:17 +0000",)], ['timestamp'])
df.withColumn(
"timestamp",
F.to_timestamp("timestamp", "E, dd MMM yyyy HH:mm:ss Z")
).show()
#+-------------------+
#| timestamp|
#+-------------------+
#|2021-01-28 02:54:17|
#+-------------------+
但是,从 Spark 3.0 版本开始,在解析到时间戳时,您不能再使用 E
等符号:
Symbols of ‘E’, ‘F’, ‘q’ and ‘Q’ can only be used for datetime
formatting, e.g. date_format
. They are not allowed used for datetime
parsing, e.g. to_timestamp
.
您可以将时间解析器设置为旧版:
spark.conf.set("spark.sql.legacy.timeParserPolicy", "LEGACY")
或者在使用 to_timestamp
之前使用一些字符串函数从字符串中删除日期部分:
df.withColumn(
"timestamp",
F.to_timestamp(F.split("timestamp", ",")[1], " dd MMM yyyy HH:mm:ss Z")
).show()
我什至不知道从哪里开始。我想将当前为字符串的列解析为时间戳。记录如下所示:
Thu, 28 Jan 2021 02:54:17 +0000
将其解析为时间戳的最佳方法是什么?我什至不确定从哪里开始,因为它不是存储日期的超级常用方法
您或许可以从文档开始 Datetime Patterns for Formatting and Parsing:
import pyspark.sql.functions as F
df = spark.createDataFrame([("Thu, 28 Jan 2021 02:54:17 +0000",)], ['timestamp'])
df.withColumn(
"timestamp",
F.to_timestamp("timestamp", "E, dd MMM yyyy HH:mm:ss Z")
).show()
#+-------------------+
#| timestamp|
#+-------------------+
#|2021-01-28 02:54:17|
#+-------------------+
但是,从 Spark 3.0 版本开始,在解析到时间戳时,您不能再使用 E
等符号:
Symbols of ‘E’, ‘F’, ‘q’ and ‘Q’ can only be used for datetime formatting, e.g.
date_format
. They are not allowed used for datetime parsing, e.g.to_timestamp
.
您可以将时间解析器设置为旧版:
spark.conf.set("spark.sql.legacy.timeParserPolicy", "LEGACY")
或者在使用 to_timestamp
之前使用一些字符串函数从字符串中删除日期部分:
df.withColumn(
"timestamp",
F.to_timestamp(F.split("timestamp", ",")[1], " dd MMM yyyy HH:mm:ss Z")
).show()