web-dev-qa-db-ja.com

Spark:夏時間を考慮してGMTタイムスタンプを東部標準時に変換する

GMTタイムスタンプ文字列の列を東部標準時のタイムスタンプの列に変換しようとしています。夏時間を考慮に入れたいです。

タイムスタンプ文字列の列は次のようになります。

'2017-02-01T10:15:21+00:00'

文字列列をESTでタイムスタンプに変換する方法を理解しました。

from pyspark.sql import functions as F

df2 = df1.withColumn('datetimeGMT', df1.myTimeColumnInGMT.cast('timestamp'))
df3 = df2.withColumn('datetimeEST', F.from_utc_timestamp(df2.datetimeGMT, "EST"))

しかし、夏時間によって時間は変わりません。タイムスタンプの変換で夏時間を説明する別の関数または何かがありますか?

編集:私はそれを理解したと思います。上記のfrom_utc_timestamp呼び出しでは、「EST」の代わりに「America/New_York」を使用する必要がありました:

df3 = df2.withColumn('datetimeET', F.from_utc_timestamp(df2.datetimeGMT, "America/New_York"))
6
Bob Swain

答えがわからなくなったので、ここに追加しようと思いました。また、質問を投稿する前にこの問題を検索していたときに、スパークの夏時間について何も見つからなかったため、この質問/回答は価値があると思います。基礎となるJava関数を検索する必要があることに気付いたはずです。

質問への答えは、「EST」の代わりに文字列「America/New_York」を使用することでした。これにより、夏時間が正しく適用されます。

from pyspark.sql import functions as F
df3 = df2.withColumn('datetimeET', F.from_utc_timestamp(df2.datetimeGMT, "America/New_York"))

編集:

このリンクには、この方法で使用できる使用可能なタイムゾーン文字列のリストが表示されます。 https://garygregory.wordpress.com/2013/06/18/what-are-the-Java-timezone-ids/

6
Bob Swain