pyspark -为什么将字符串(时间)转换为时间戳返回None?

b1zrtrql  于 2022-12-03  发布在  Spark
关注(0)|答案(1)|浏览(149)

1.我有下面的示例pyspark Dataframe ,并希望从消息列中提取时间,然后将提取时间转换为时间戳类型。

message,class
"2022-10-28 07:46:59,705               one=1 Two=2 Three=3",classA
"2022-10-27 10:03:59,800               four=4 Five=5 Six=6",classB

1.我尝试了以下两种方法,但都不起作用。
路径1:

sparkDF.withColumn("TIMESTAMP", to_timestamp(regexp_extract(col('message'), '(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d+)', 1),"MM-dd-yyyy HH:mm:ss.SSSS"))

路径2:

sparkDF.withColumn("TIMESTAMP", regexp_extract(col('message'), '(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d+)', 1).cast("timestamp")

谁能帮我看看吗?

tp5buhyn

tp5buhyn1#

你可以用" "(多个空格) 分割message字段,然后提取第一个元素。提取的元素可以很容易地转换为时间戳。
参见示例

data_sdf. \
    withColumn('ts', func.to_timestamp(func.split('message', '  ')[0], 'yyyy-MM-dd HH:mm:ss,SSS')). \
    show(truncate=False)

# +---------------------------------------------------------+------+-----------------------+
# |message                                                  |class |ts                     |
# +---------------------------------------------------------+------+-----------------------+
# |2022-10-28 07:46:59,705               one=1 Two=2 Three=3|classA|2022-10-28 07:46:59.705|
# |2022-10-27 10:03:59,800               four=4 Five=5 Six=6|classB|2022-10-27 10:03:59.8  |
# +---------------------------------------------------------+------+-----------------------+

# root
#  |-- message: string (nullable = true)
#  |-- class: string (nullable = true)
#  |-- ts: timestamp (nullable = true)

相关问题