首页 > 解决方案 > 使用 scala / from_unixtime 在 Apache Spark 中获取 ISO 年周,在 Spark 和 Hive 中表现不同

问题描述

我正在尝试使用 scala 从字符串格式的日期在 Spark 中获取 ISO 年周。

以下 SQL 查询在 hive 中返回预期结果。
即,如果日期是 2016 年 1 月 1 日,则根据 ISO 标准,它是 2015 年的第 53 周,因此结果为 201553

hive> select from_unixtime(unix_timestamp('20160101', 'yyyyMMdd'), 'Yww');
OK
201553
Time taken: 0.444 seconds, Fetched: 1 row(s)

如果我尝试通过 Spark sql 在 Spark 中运行相同的程序,它会给我一个不同的结果。

scala> spark.sql("""select from_unixtime(unix_timestamp('20160101', 'yyyyMMdd'), 'Yww')""").show
+------------------------------------------------------+
|from_unixtime(unix_timestamp(20160101, yyyyMMdd), Yww)|
+------------------------------------------------------+
|                                                201601|
+------------------------------------------------------+

我需要从 Spark 程序中得到的结果201553
我正在使用 Spark 2.3 版
有人可以解释发生了什么吗?
请让我知道是否有任何方法可以在 Spark 中获得 ISO 年周。

标签: scalaapache-sparkhiveapache-spark-sqlweek-number

解决方案


推荐阅读