簡體   English   中英

Spark 2.3 (Scala) - 將時間戳列從 UTC 轉換為另一列中指定的時區

[英]Spark 2.3 (Scala) - Convert a timestamp column from UTC to timezone specified in another column

我有一個包含如下數據的數據框:

    +----------------------+------------+
    | utc_timestamp        | tz_locale  |
    +----------------------+------------+
    |2021-07-16T10:00:00Z  | US/Eastern |
    |2021-07-19T15:00:00Z  | US/Central |
    +----------------------+------------+

我想根據tz_locale列中的值將時間戳從 UTC (TZ 0) 轉換為本地時間:

    +----------------------+------------+
    | utc_timestamp        | tz_locale  |
    +----------------------+------------+
    |2021-07-16T06:00:00Z  | US/Eastern |
    |2020-12-19T09:00:00Z  | US/Central |
    +----------------------+------------+

我試着這樣寫:

val new_df = df.withColumn("utc_timestamp", from_utc_timestamp(df.col("utc_timestamp"), df.col("tz_locale")))

看來from_utc_timestamp一個 String 常量作為第二個參數,所以它顯然只能將整個列轉換為相同的時區。 但是我需要根據該行中另一列的值動態轉換每一行。

我認為這在較新版本的 Spark 中是可能的( from_utc_timestamp因采用(DataFrame.col, DataFrame.col)的版本而過載),但我使用的是 2.3 並且升級不是一種選擇。 如何在 Spark 2.3 中做到這一點? 這似乎是一項相當常見的任務,但我無法弄清楚,並且無法使用搜索找到任何內容。

對於 Spark 2.3 或更早版本,您可以通過expr使用類型約束較少的 SQL 表達式:

df.withColumn("utc_timestamp", expr("from_utc_timestamp(utc_timestamp, tz_locale)")).show

+-------------------+----------+
|      utc_timestamp| tz_locale|
+-------------------+----------+
|2021-07-15 23:00:00|US/Eastern|
|2021-07-19 03:00:00|US/Central|
+-------------------+----------+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM