Vic*_*tor 9 apache-spark pyspark
我有一个数据集,其中 1 列是long代表毫秒的 a 。yyyy-MM-dd HH:mm:ss我想获取该数字在UTC中表示的时间戳 ( ) 。基本上我想要与https://currentmillis.com/相同的行为
我的问题是,有没有办法让 Spark 代码将毫秒长字段转换为 UTC 时间戳?我能够使用本机 Spark 代码得到的只是将那么长的时间转换为我的本地时间 (EST):
from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark.sql import types as T
from pyspark.sql import functions as F
sc = SparkContext()
spark = SQLContext(sc)
df = spark.read.json(sc.parallelize([{'millis':1582749601000}]))
df.withColumn('as_date', F.from_unixtime((F.col('millis')/1000))).show()
+-------------+-------------------+
| millis| as_date|
+-------------+-------------------+
|1582749601000|2020-02-26 15:40:01|
+-------------+-------------------+
Run Code Online (Sandbox Code Playgroud)
我已经能够通过强制整个 Spark 会话的时区来转换为 UTC。不过,我想避免这种情况,因为必须为该作业中的特定用例更改整个 Spark 会话时区感觉是错误的。
spark.sparkSession.builder.master('local[1]').config("spark.sql.session.timeZone", "UTC").getOrCreate()
Run Code Online (Sandbox Code Playgroud)
我还想避免自定义函数,因为我希望能够在 Scala 和 Python 中部署它,而无需在每个函数中编写特定于语言的代码。
mur*_*ash 15
用于to_utc_timestamp指定您的时区( EST)。
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|
+-------------+-------------------+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14051 次 |
| 最近记录: |