使用在火花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)。

而這個選項,隻建議作為一個臨時的解決方案。



這篇文章有用嗎?