Извлекайте только час из эпохи в скале - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть датафрейм с одним из столбцов в качестве эпохи. Я хочу извлечь из него только час и отобразить его в виде отдельного столбца.

Ниже приведен пример кадра данных:

+----------+-------------+
|    NUM_ID|        STIME|
+----------+-------------+
|xxxxxxxx01|1571634285000|
|xxxxxxxx01|1571634299000|
|xxxxxxxx01|1571634311000|
|xxxxxxxx01|1571634316000|
|xxxxxxxx02|1571634318000|
|xxxxxxxx02|1571398176000|
|xxxxxxxx02|1571627596000|

Ниже приведен ожидаемый результат.

+----------+-------------+-----+
|    NUM_ID|        STIME| HOUR|
+----------+-------------+-----+
|xxxxxxxx01|1571634285000|  10 |
|xxxxxxxx01|1571634299000|  10 |
|xxxxxxxx01|1571634311000|  10 |
|xxxxxxxx01|1571634316000|  10 |
|xxxxxxxx02|1571634318000|  10 |
|xxxxxxxx02|1571398176000|  16 |
|xxxxxxxx02|1571627596000|  08 |

Я пытался

val test = test1DF.withColumn("TIME", extract HOUR(from_unixtime($"STIME"/1000)))

, который вызывает исключение при

<console>:46: error: not found: value extract

Попытка получить формат даты, как показано ниже, и даже если она не работает.

val test = test1DF.withColumn("TIME", to_timestamp(from_unixtime(col("STIME")))

Тип данных STIME в фрейме данных - Long.

Есть ли у вас данные для извлечения часа из эпохи в типе данных Long?

1 Ответ

1 голос
/ 04 ноября 2019

Извлечение часов из отметки времени так же просто, как использование функции hour():

import org.apache.spark.sql.functions._

val df_with_hour = df.withColumn("TIME", hour(from_unixtime($"STIME" / 1000)))

df_with_hour.show()
// +-------------+----+
// |        STIME|TIME|
// +-------------+----+
// |1571634285000|   5|
// |1571398176000|  11|
// |1571627596000|   3|
// +-------------+----+

(Примечание: я нахожусь в другом часовом поясе)

...