PySpark使用regex函数修复时间戳列

jrcvhitl  于 2022-12-22  发布在  Spark
关注(0)|答案(1)|浏览(102)

使用PySpark,
我有一个字符串,看起来像:

+-------------------------+
|2022-12-07050641         |
+-------------------------+

但需要它是这样的格式:

+-------------------------+
|2022-11-11 08:48:00.707  |
+-------------------------+

看起来to_timestamp()函数要求格式化为时间戳格式。
我一直在尝试使用to_timestamp()函数将字符串转换为时间戳,但值返回空值。我认为这是因为值的格式(2022-12-07050641)。我如何使用regex将值固定为所需的值?

btxsgosb

btxsgosb1#

要使用PySpark中的to_timestamp函数将字符串'2022-12-07050641'转换为时间戳,可以使用正则表达式提取字符串的日期和时间部分,然后使用to_timestamp函数将它们转换为时间戳。

import re
from pyspark.sql.functions import to_timestamp, regexp_extract

# Define the regular expression pattern to extract the date and time parts
pattern = r'(\d{4}-\d{2}-\d{2})(\d{6})'

# Extract the date and time parts using the regular expression
df = df.withColumn('date', regexp_extract('string_column', pattern, 1))
df = df.withColumn('time', regexp_extract('string_column', pattern, 2))

# Convert the date and time parts to a timestamp
df = df.withColumn('timestamp', to_timestamp(df['date'] + ' ' + df['time'], 'yyyy-MM-dd HHmmss'))

# Drop the date and time columns
df = df.drop('date').drop('time')

相关问题