Je suis nouveau dans Spark SQL et j'essaie de convertir une chaîne en horodatage dans un cadre de données spark. J'ai une chaîne qui ressemble à '2017-08-01T02:26:59.000Z'
dans une colonne appelée chaîne_heure
Mon code pour convertir cette chaîne en horodatage est
CAST (time_string AS Timestamp)
Mais cela me donne un horodatage de 2017-07-31 19:26:59
Pourquoi change-t-il l'heure? Y a-t-il un moyen de le faire sans changer l'heure?
Merci pour toute aide!
Vous pouvez utiliser la fonction nix_timestamp pour convertir la date au format utc en horodatage
val df2 = Seq(("a3fac", "2017-08-01T02:26:59.000Z")).toDF("id", "eventTime")
df2.withColumn("eventTime1", unix_timestamp($"eventTime", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").cast(TimestampType))
Sortie:
+-------------+---------------------+
|userid |eventTime |
+-------------+---------------------+
|a3fac |2017-08-01 02:26:59.0|
+-------------+---------------------+
J'espère que cela t'aides!
Solution sur Java
Il existe quelques Spark fonctions SQL qui vous permettent de jouer avec le format de date.
Exemple de conversion: 201812240915 -> 2018-12-24 09:15:
Solution (instruction Spark SQL):
SELECT
...
to_timestamp(cast(DECIMAL_DATE as string),'yyyyMMddHHmmss') as `TIME STAMP DATE`,
...
FROM some_table
Vous pouvez utiliser les instructions SQL en utilisant une instance de org.Apache.spark.sql.SparkSession. Par exemple, si vous souhaitez exécuter une instruction sql, Spark fournit la solution suivante:
...
// You have to create an instance of SparkSession
sparkSession.sql(sqlStatement);
...
Notes: