web-dev-qa-db-fra.com

Comment convertir une colonne d'horodatage en secondes d'époque?

Comment convertir une colonne d'horodatage en secondes d'époque?

var df = sc.parallelize(Seq("2018-07-01T00:00:00Z")).toDF("date_string")
df = df.withColumn("timestamp", $"date_string".cast("timestamp"))
df.show(false)

Trame de données:

+--------------------+---------------------+
|date_string         |timestamp            |
+--------------------+---------------------+
|2018-07-01T00:00:00Z|2018-07-01 00:00:00.0|
+--------------------+---------------------+
5
troutinator

Si vous avez un horodatage, vous pouvez le lancer longtemps pour obtenir les secondes de l'époque

df = df.withColumn("Epoch_seconds", $"timestamp".cast("long"))
df.show(false)

Trame de données

+--------------------+---------------------+-------------+
|date_string         |timestamp            |Epoch_seconds|
+--------------------+---------------------+-------------+
|2018-07-01T00:00:00Z|2018-07-01 00:00:00.0|1530403200   |
+--------------------+---------------------+-------------+
2
troutinator

Cela peut être fait facilement avec unix_timestamp fonction dans spark SQL comme ceci:

spark.sql("SELECT unix_timestamp(inv_time) AS time_as_long FROM agg_counts LIMIT 10").show()

J'espère que cela t'aides.

0
dyatchenko

Vous pouvez utiliser la fonction unix_timestamp et le cast dans n'importe quel type de données.

Exemple:

val df1 = df.select(unix_timestamp($"date_string", "yyyy-MM-dd HH:mm:ss").cast(LongType).as("Epoch_seconds"))
0
Samrat

Utilisation unix_timestamp de org.Apache.spark.functions. Il peut s'agir d'une colonne d'horodatage ou d'une colonne de chaîne où il est possible de spécifier le format. De la documentation:

public static Column unix_timestamp(Column s)

Convertit la chaîne temporelle au format aaaa-MM-jj HH: mm: ss en horodatage Unix (en secondes), en utilisant le fuseau horaire par défaut et les paramètres régionaux par défaut, renvoie null si échec.

public static Column unix_timestamp(Column s, String p)

Convertir la chaîne de temps avec le modèle donné (voir http://docs.Oracle.com/javase/tutorial/i18n/format/simpleDateFormat.html ) en horodatage Unix (en secondes), retourner null si échec .

Utilisez comme suit:

import org.Apache.spark.functions._

df.withColumn("Epoch_seconds", unix_timestamp($"timestamp")))

ou si la colonne est une chaîne avec un autre format:

df.withColumn("Epoch_seconds", unix_timestamp($"date_string", "yyyy-MM-dd'T'HH:mm:ss'Z'")))
0
Shaido