встроенная функция spark-sql dayofmonth, возвращающая странные результаты - PullRequest
0 голосов
/ 05 марта 2019

По какой-то странной причине функция dayofmonth в искре, похоже, возвращает странное значение в течение многих лет 1500 or less.

Ниже приведены полученные результаты ->

scala> spark.sql("SELECT dayofmonth('1501-02-14') ").show()
+------------------------------------+
|dayofmonth(CAST(1501-02-14 AS DATE))|
+------------------------------------+
|                                  14|
+------------------------------------+


scala> spark.sql("SELECT dayofmonth('1500-02-14') ").show()
+------------------------------------+
|dayofmonth(CAST(1500-02-14 AS DATE))|
+------------------------------------+
|                                  13|
+------------------------------------+


scala> spark.sql("SELECT dayofmonth('1400-02-14') ").show()
+------------------------------------+
|dayofmonth(CAST(1400-02-14 AS DATE))|
+------------------------------------+
|                                  12|
+------------------------------------+

Кто-нибудь может объяснить, почему искра так себя ведет?

1 Ответ

0 голосов
/ 05 марта 2019

Это потому, что даты выставляются извне как java.sql.Date и представляются внутри как число дат, начиная с эпохи Unix (1970-01-01).

Ссылки: источник 1 , источник 2 и 3 .

Это в основном создает множество проблем при работе с датами до 1970 года, но выможно попробовать создать udf s (я не могу поверить, что я пишу это) с внешними библиотеками, которые могут справиться с этой проблемой, как советовано здесь .

Напоминание: Конечно, необходимо учитывать узкие места в производительности, используя udf s.Подробнее об этом здесь .

Для получения дополнительной информации о Unix Time вы можете прочитать следующее:

https://en.wikipedia.org/wiki/Unix_time

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...