web-dev-qa-db-ja.com

タイムスタンプ列をエポック秒に変換する方法は?

タイムスタンプ列をエポック秒に変換するにはどうすればよいですか?

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

データフレーム:

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

タイムスタンプがある場合、それをlongにキャストしてエポック秒を取得できます

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

DataFrame

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

spark SQLのunix_timestamp関数を使用すると、次のように簡単に実行できます。

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

お役に立てれば。

0
dyatchenko

関数unix_timestampを使用して、任意のデータ型にキャストできます。

例:

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

使用する - unix_timestamp からorg.Apache.spark.functions。タイムスタンプ列、または形式を指定できる文字列列からできます。ドキュメントから:

public static Column unix_timestamp(Column s)

デフォルトのタイムゾーンとデフォルトのロケールを使用して、yyyy-MM-dd HH:mm:ss形式の時間文字列をUnixタイムスタンプ(秒単位)に変換し、失敗した場合はnullを返します。

public static Column unix_timestamp(Column s, String p)

与えられたパターンの時間文字列( http://docs.Oracle.com/javase/tutorial/i18n/format/simpleDateFormat.html を参照)をUnixタイムスタンプ(秒単位)に変換し、失敗した場合はnullを返す。

次のように使用します。

import org.Apache.spark.functions._

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

または、列が他の形式の文字列の場合:

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