我试图在spark中做一个时间戳差异,但它没有按预期工作。
下面是我如何尝试
import org.apache.spark.sql.functions.*
df = df.withColumn("TimeStampDiff", from_unixtime(unix_timestamp(df.col("TimeStampHigh"), "HH:mm:ss").minus(unix_timestamp(df.col("TimeStampLow"), "HH:mm:ss")),"HH:mm:ss"))
价值观
TimeStampHigh - 15:57:01
TimeStampLow - 00:11:57
它返回一个 10:45:04
预期输出- 15:45:04
我的另一个选择是使用java实现的udf。
任何提示都会有帮助。
1条答案
按热度按时间qf9go6mv1#
那是因为
from_unixtime
(我的重点):将unix epoch(1970-01-01 00:00:00 utc)中的秒数转换为表示当前系统时区中该时刻的时间戳的字符串,格式为给定格式。
很明显,您的系统或jvm没有配置为使用utc时间。
您应该执行以下操作之一:
配置jvm以使用适当的时区(
-Duser.timezone=UTC
两者皆适用spark.executor.extraJavaOptions
以及spark.driver.extraJavaOptions
).套
spark.sql.session.timeZone
使用适当的时区。例子: