使用在火花datetime值3.0及以上

如何正确使用datetime函数与砖火花SQL运行时7.3 LTS及以上。

写的deepak.bhutada

去年发表在:2022年10月26日

问题

你从支持集群运行数据砖运行时迁移工作6.6和Apache火花2.4.5低于低于集群运行的当前版本砖运行时。

如果你的工作和/或笔记本电脑日期转换过程,他们可能会失败SparkUpgradeException错误信息在运行在集群升级。

错误的SQL语句:SparkUpgradeException:你可能会得到不同的结果由于火花3.0的升级:无法识别DateTimeFormatter YYYY-MM-DD”模式。1)可以设置spark.sql.legacy。timeParserPolicy火花3.0之前遗留恢复行为。2)您可以形成一个有效的datetime模式的指导https://spark.apache.org/docs/latest/sql-ref-datetime-pattern.html

导致

火花3.0之前,火花朱利安和结合使用公历日历。对日期在1582年之前,引发使用公历。对日期1582年之后,引发使用公历。

在火花3.0及以上,火花使用预期的公历。这个日历也使用其他系统,如Apache箭头,熊猫,R。

日历使用继承了遗产java.sql.DateAPI,它在Java 8所取代java.time.LocalDate并使用预期的公历。

解决方案

你应该更新你的DateTime引用所以他们兼容引发3.0及以上。

例如,如果您试图解析日期格式YYYY-MM-DD在火花3.0及以上,它返回一个错误。

选择TO_DATE (' 2017-01-01 ', ' YYYY-MM-DD)日期

使用格式yyyy-MM-dd在火花3.0及以上工作正常。

选择TO_DATE (' 2017-01-01 ', ' yyyy-MM-dd)日期

资本化的差异可能会出现轻微,但火花,D引用day-of-year,d引用中使用的月的日期,当一个DateTime函数。

审查所有的定义的火花DateTime模式格式化和解析为更多的细节。

删除

信息

如果你想暂时恢复到火花2。x DateTime格式,您可以设置spark.sql.legacy.timeParserPolicy遗产在一个笔记本上。集群中还可以设置这个值火花配置(AWS|Azure|GCP)。

而这个选项,只建议作为一个临时的解决方案。



这篇文章有用吗?