从Scala中的Epochtime仅提取小时

我有一个数据框,其列之一为epochtime。 我只想从中提取一个小时,并将其显示为单独的列。

下面是示例数据框:

+----------+-------------+
|    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。

是否会导致从Longoch数据类型的时间提取小时?

wduke8818 回答:从Scala中的Epochtime仅提取小时

从时间戳中提取小时数与使用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|
// +-------------+----+

(注意:我所在的时区不同)

本文链接:https://www.f2er.com/3168542.html

大家都在问