Apache spark 将具有UTC偏移量的字符串转换为spark时间戳
如何将字符串Apache spark 将具有UTC偏移量的字符串转换为spark时间戳,apache-spark,pyspark,apache-spark-sql,datetime-format,Apache Spark,Pyspark,Apache Spark Sql,Datetime Format,如何将字符串2018-03-21 08:15:00+03:00存储为timestamptype,并在spark中保留UTC偏移 在下面试用 from pyspark.sql.functions import * df = spark.createDataFrame([("2018-03-21 08:15:00 +03:00",)], ["timestamp"]) newDf= df.withColumn("newtimestamp",
2018-03-21 08:15:00+03:00
存储为timestamptype
,并在spark中保留UTC偏移
在下面试用
from pyspark.sql.functions import *
df = spark.createDataFrame([("2018-03-21 08:15:00 +03:00",)], ["timestamp"])
newDf= df.withColumn("newtimestamp", to_timestamp(col('timestamp'), "yyyy-MM-dd HH:mm:ss XXX")
)
这将打印值转换为UTC时间的newtimestamp
列,即2018-03-21 05:15:00
如何将此字符串存储为数据帧保留偏移量中的时间戳列,即将同一字符串存储为时间戳或存储为
2018-03-21 08:15:00+3000
您需要使用date\u格式将从转换中获得的时间戳格式化为所需模式:
newDf = df.withColumn(
"newtimestamp",
to_timestamp(col('timestamp'), "yyyy-MM-dd HH:mm:ss XXX")
).withColumn(
"newtimestamp_formatted",
date_format("newtimestamp", "yyyy-MM-dd HH:mm:ss Z")
)
newDf.show(truncate=False)
#+--------------------------+-------------------+-------------------------+
#|timestamp |newtimestamp |newtimestamp_formatted |
#+--------------------------+-------------------+-------------------------+
#|2018-03-21 08:15:00 +03:00|2018-03-21 06:15:00|2018-03-21 06:15:00 +0100|
#+--------------------------+-------------------+-------------------------+
感谢@Blackishop,因为您可以看到时间会自动转换,最终结果中的偏移量不是+0300。我希望将相同的日期和偏移量(+3)存储为时间戳类型,而不进行任何时间转换。可能吗?是的,但我们在源中接收到具有不同时间偏移量的记录,即一条记录具有2018-03-21 08:15:00+03:00
,另一条记录具有2019-05-21 00:15:00+01:00
。因此,我希望将记录存储为保留相同偏移值的timestamptype,即第一条记录为+03,第二条记录为+01。如果我将时区设置为任何特定位置,spark会将原始日期时间转换为该偏移量,从而丢失原始偏移量值。