Apache spark Spark将毫秒转换为UTC日期时间

Apache spark Spark将毫秒转换为UTC日期时间,apache-spark,pyspark,Apache Spark,Pyspark,我有一个数据集,其中1列是表示毫秒的long。我想获取此数字在UTC中表示的时间戳(yyyy-MM-dd HH:MM:ss)。基本上我想要和你一样的行为 我的问题是,有没有办法让Spark代码将毫秒长的字段转换为UTC时间戳?我使用本机Spark代码所能得到的只是将这段时间转换为我的本地时间(EST): 我已经能够通过强制整个Spark会话的时区转换为UTC。不过,我希望避免这种情况,因为在该工作中,必须为特定用例更改整个Spark会话时区感觉是错误的 spark.sparkSession.b

我有一个数据集,其中1列是表示毫秒的
long
。我想获取此数字在UTC中表示的时间戳(
yyyy-MM-dd HH:MM:ss
)。基本上我想要和你一样的行为

我的问题是,有没有办法让Spark代码将毫秒长的字段转换为UTC时间戳?我使用本机Spark代码所能得到的只是将这段时间转换为我的本地时间(EST):

我已经能够通过强制整个Spark会话的时区转换为UTC。不过,我希望避免这种情况,因为在该工作中,必须为特定用例更改整个Spark会话时区感觉是错误的

spark.sparkSession.builder.master('local[1]').config("spark.sql.session.timeZone", "UTC").getOrCreate()

我还希望避免自定义定义的函数,因为我希望能够在Scala和Python中部署这些函数,而无需在每个函数中编写特定于语言的代码。

使用
到utc\u时间戳来指定您的时区(
EST


谢谢
from_utc_timestamp
reutrns 10:40:01,但是
to_utc_timestamp
返回20:40:01,这正是我想要的。你可以在你的回答中改变这一点。另外,你知道有没有一种方法可以动态地获取区域设置的时区?我希望避免硬编码
EST
,因为这将部署在一个集群中,其中的时区可能会随时间而改变。在我的databricks集群上,使用列('as_date',F.from_unixtime((F.col('millis')/1000)))执行代码
df.with列('as_date',F.from_unixtime((F.col('millis')/1000))。show()
返回
20:40:01
。我想你已经为时区调整了你的星火设置了?呃。。。更多的原因是动态注入时区,而不是硬编码
spark.sparkSession.builder.master('local[1]').config("spark.sql.session.timeZone", "UTC").getOrCreate()
    from pyspark.sql import functions as F
    df.withColumn("as_date", F.to_utc_timestamp(F.from_unixtime(F.col("millis")/1000,'yyyy-MM-dd HH:mm:ss'),'EST')).show()

    +-------------+-------------------+
    |       millis|            as_date|
    +-------------+-------------------+
    |1582749601000|2020-02-26 20:40:01|
    +-------------+-------------------+