Мне нужно получить минимальное значение из кадра данных Spark и преобразовать его. В настоящее время я просто получаю это значение и преобразовываю его с помощью DateTime, однако в результате оно мне нужно в формате unix_timestamp. Итак, как я могу преобразовать DateTime в unix_timestamp, используя функции Scala или функции Spark?
Вот мой текущий код, который на данный момент возвращает DateTime:
val minHour = new DateTime(df.agg(min($"event_ts"))
.as[Timestamp].collect().head))
.minusDays(5)
.withTimeAtStartOfDay())
Я также пытался использовать функции Spark, но мне не удалось переключить метку времени на время начала дня (что можно сделать с помощью функции DateTime withTimeAtStartOfDay):
val minHour = new DateTime(df.agg(min($"event_ts").alias("min_ts"))
.select(unix_timestamp(date_sub($"min_ts", 5)))
.as[Long].collect().head)
date_sub
установит отметку времени на дату, поэтому время будет автоматически сдвинуто на начало дня.
df.show
+-------------------+----------+
| event_ts|event_hour|
+-------------------+----------+
|2017-05-01 00:22:01|1493598121|
|2017-05-01 00:22:08|1493598128|
|2017-05-01 00:22:01|1493598121|
|2017-05-01 00:22:06|1493598126|
+-------------------+----------+
df.agg(
min($"event_ts").alias("min_ts")
).select(
unix_timestamp(date_sub($"min_ts", 5)).alias("min_ts_unix")
).withColumn(
"min_ts", $"min_ts_unix".cast("timestamp")
).show
+-----------+-------------------+
|min_ts_unix| min_ts|
+-----------+-------------------+
| 1493164800|2017-04-26 00:00:00|
+-----------+-------------------+