Apache spark 如何在PYSPARK中将字符串转换为时间?
我正在尝试将字符串转换为时间,但得到空值 例如, val Start=='080000' 使用以下步骤Apache spark 如何在PYSPARK中将字符串转换为时间?,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,我正在尝试将字符串转换为时间,但得到空值 例如, val Start=='080000' 使用以下步骤 1)unix_timestamp(col('Start'),'HH:mm:ss'),\ 2)to_timestamp(lit('Start'),'HH:mm:ss'),\ 3)to_timestamp(col('Start'),'HH:mm:ss'),\ 4)from_unixtime(unix_timestamp(col('Start'),'HH:mm:ss')) 预期输出: 08:00:
1)unix_timestamp(col('Start'),'HH:mm:ss'),\
2)to_timestamp(lit('Start'),'HH:mm:ss'),\
3)to_timestamp(col('Start'),'HH:mm:ss'),\
4)from_unixtime(unix_timestamp(col('Start'),'HH:mm:ss'))
预期输出:
08:00:00(HH:MM:SS)
有人能推荐一下Spark确实有时间类型的方法吗。最新版本v3.1.1只有
DateType
和TimestampType
,因此无法简单地回答将字符串转换为时间的请求
但是,可以将080000
(StringType)转换为2000-01-01 08:00:00
(TimestampType)–或者转换为日期无关紧要的任何日期–您可以执行任何类型的日期比较
(df
.withColumn('from_timestamp',F.regexp_replace(F.col('from'),'(\d{2})(\d{2}),'2000-01-01$1:$2:$3'))
.withColumn('to_timestamp',F.regexp_replace(F.col('to'),'(\d{2})(\d{2}),'2000-01-01$1:$2:$3'))
.withColumn('diff',F.to_timestamp(F.col('to_timestamp'))-F.to_timestamp(F.col('from_timestamp'))
.show()
)
# +------+------+-------------------+-------------------+----------+
#|从|到|从|时间戳|到|时间戳|差异|
# +------+------+-------------------+-------------------+----------+
#| 080000 | 083000 | 2000-01-01 08:00:00 | 2000-01-01 08:30:00 | 30分钟|
# +------+------+-------------------+-------------------+----------+
但是,在执行sql到Pyspark的代码迁移时,我需要计算开始时间和结束时间。如何处理这些场景?很简单,需要在Pyspark中将字符串转换为时间