web-dev-qa-db-fra.com

Spark Chaîne de conversion SQL en horodatage

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!

14
Jessica

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!

18
Shankar Koirala

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:

  • Vous devez convertir la décimale en chaîne et après avoir réalisé l'analyse au format d'horodatage
  • Vous pouvez jouer avec le format obtenu au format que vous souhaitez ...
0
Rzv Razvan