2017-08-18 2 views
3

J'essaie de convertir une colonne de chaînes d'horodatage GMT en une colonne d'horodatages dans le fuseau horaire de l'Est. Je veux prendre en compte l'heure d'été.Spark: conversion des horodatages GMT à Eastern en tenant compte de l'heure d'été

Ma colonne de chaînes d'horodatage ressembler à ceci:

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

je me suis dit comment convertir la colonne de chaîne en un horodatage dans 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")) 

Mais les temps ne changent pas l'heure d'été. Y at-il une autre fonction ou quelque chose qui compte pour l'heure d'été avec la conversion des horodateurs?

EDIT: Je pense que je l'ai compris. Dans l'appel from_utc_timestamp ci-dessus, je devais utiliser « Amérique/New_York » au lieu de « EST »:

df3 = df2.withColumn('datetimeET', F.from_utc_timestamp(df2.datetimeGMT, "America/New_York")) 
+1

Oui, vous avez raison. Vous devez toujours utiliser les formes zone/localité des identificateurs de fuseau horaire. Vous pouvez répondre à votre propre question si vous le souhaitez, bien que ce point particulier ait été abordé de nombreuses fois auparavant (peut-être pas en ce qui concerne les étincelles). –

Répondre

1

J'ai fini par comprendre la réponse, donc je pensais que j'ajouterais ici. Je pense aussi que cette question/réponse vaut la peine parce que pendant que je cherchais ce problème avant de poster la question, je n'ai pas pu trouver quoi que ce soit au sujet de l'heure d'été pour l'étincelle. Je devrais probablement avoir réalisé que je devrais rechercher les fonctions de Java sous-jacentes.

La réponse à la question a fini par utiliser la chaîne "America/New_York" au lieu de "EST". Cela applique correctement l'heure d'été.

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