gpt4 book ai didi

apache-spark - PySpark数据帧将异常的字符串格式转换为时间戳

转载 作者:行者123 更新时间:2023-12-03 11:07:11 36 4
gpt4 key购买 nike

我正在通过Spark 1.5.0使用PySpark。
我在日期时间列的行中有一种不寻常的字符串格式。看起来像这样:

Row[(daytetime='2016_08_21 11_31_08')]

有没有办法将这种非传统的 yyyy_mm_dd hh_mm_dd格式转换为时间戳?
最终可能会遵循以下原则
df = df.withColumn("date_time",df.daytetime.astype('Timestamp'))

我曾以为像 regexp_replace这样的Spark SQL函数可以工作,但是我当然需要替换
一半日期的 _-_在时间部分中带有 :

我当时想我可以使用 substring将列分成2个,然后从时间的结尾开始倒数。然后分别执行“regexp_replace”,然后进行连接。但这似乎有很多操作?有更容易的方法吗?

最佳答案

Spark> = 2.2

from pyspark.sql.functions import to_timestamp

(sc
.parallelize([Row(dt='2016_08_21 11_31_08')])
.toDF()
.withColumn("parsed", to_timestamp("dt", "yyyy_MM_dd HH_mm_ss"))
.show(1, False))

## +-------------------+-------------------+
## |dt |parsed |
## +-------------------+-------------------+
## |2016_08_21 11_31_08|2016-08-21 11:31:08|
## +-------------------+-------------------+

Spark <2.2
unix_timestamp无法处理任何事情:

from pyspark.sql import Row
from pyspark.sql.functions import unix_timestamp

(sc
.parallelize([Row(dt='2016_08_21 11_31_08')])
.toDF()
.withColumn("parsed", unix_timestamp("dt", "yyyy_MM_dd HH_mm_ss")
# For Spark <= 1.5
# See issues.apache.org/jira/browse/SPARK-11724
.cast("double")
.cast("timestamp"))
.show(1, False))

## +-------------------+---------------------+
## |dt |parsed |
## +-------------------+---------------------+
## |2016_08_21 11_31_08|2016-08-21 11:31:08.0|
## +-------------------+---------------------+

在这两种情况下,格式字符串都应与Java SimpleDateFormat 兼容。

关于apache-spark - PySpark数据帧将异常的字符串格式转换为时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39088473/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com