gpt4 book ai didi

scala - 在 Spark Scala 中将时间戳转换为 UTC

转载 作者:行者123 更新时间:2023-12-03 14:03:11 25 4
gpt4 key购买 nike

我的环境是 Spark 2.1,Scala

这可能很简单,但我正在崩溃。

我的数据框,myDF 就像波纹管 -

+--------------------+----------------+  
| orign_timestamp | origin_timezone|
+--------------------+----------------+
|2018-05-03T14:56:...|America/St_Johns|
|2018-05-03T14:56:...| America/Toronto|
|2018-05-03T14:56:...| America/Toronto|
|2018-05-03T14:56:...| America/Toronto|
|2018-05-03T14:56:...| America/Halifax|
|2018-05-03T14:56:...| America/Toronto|
|2018-05-03T14:56:...| America/Toronto|
+--------------------+----------------+

我需要将 orign_timestamp 转换为 UTC 并作为新列添加到 DF。下面的代码工作正常。
myDF.withColumn("time_utc", to_utc_timestamp(from_unixtime(unix_timestamp(col("orign_timestamp"), "yyyy-MM-dd'T'HH:mm:ss")),("America/Montreal"))).show

问题是我将时区固定为“美国/蒙特利尔”。我需要通过 timeZone 表单“orign_timeone”列。我试过
myDF.withColumn("time_utc", to_utc_timestamp(from_unixtime(unix_timestamp(col("orign_timestamp"), "yyyy-MM-dd'T'HH:mm:ss")), col("orign_timezone".toString.trim))).show

got Error:
<console>:34: error: type mismatch;
found : org.apache.spark.sql.Column
required: String

我尝试了下面的代码,没有通过异常但新列与 origin_time 具有相同的时间。
myDF.withColumn("origin_timestamp", to_utc_timestamp(from_unixtime(unix_timestamp(col("orign_timestamp"), "yyyy-MM-dd'T'HH:mm:ss")), col("rign_timezone").toString)).show

最佳答案

每当您遇到这样的问题时,您可以使用 expr

import org.apache.spark.sql.functions._

val df = Seq(
("2018-05-03T14:56:00", "America/St_Johns"),
("2018-05-03T14:56:00", "America/Toronto"),
("2018-05-03T14:56:00", "America/Halifax")
).toDF("origin_timestamp", "origin_timezone")

df.withColumn("time_utc",
expr("to_utc_timestamp(origin_timestamp, origin_timezone)")
).show

// +-------------------+----------------+-------------------+
// | origin_timestamp| origin_timezone| time_utc|
// +-------------------+----------------+-------------------+
// |2018-05-03T14:56:00|America/St_Johns|2018-05-03 17:26:00|
// |2018-05-03T14:56:00| America/Toronto|2018-05-03 18:56:00|
// |2018-05-03T14:56:00| America/Halifax|2018-05-03 17:56:00|
// +-------------------+----------------+-------------------+

selectExpr :
df.selectExpr(
"*", "to_utc_timestamp(origin_timestamp, origin_timezone) as time_utc"
).show

// +-------------------+----------------+-------------------+
// | origin_timestamp| origin_timezone| time_utc|
// +-------------------+----------------+-------------------+
// |2018-05-03T14:56:00|America/St_Johns|2018-05-03 17:26:00|
// |2018-05-03T14:56:00| America/Toronto|2018-05-03 18:56:00|
// |2018-05-03T14:56:00| America/Halifax|2018-05-03 17:56:00|
// +-------------------+----------------+-------------------+

关于scala - 在 Spark Scala 中将时间戳转换为 UTC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50182370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com