日期函數在Apache Spark 3.0中隻接受int值

Date函數在Apache Spark 3.0中隻接受int值;分數和字符串值返回AnalysisException錯誤。

寫的亞當Pavlacka

最後發布時間:2022年5月23日

問題

你正試圖使用date_add ()date_sub ()函數,但是它們返回一個SQL語句錯誤:AnalysisException錯誤消息。

在Spark 2.4及以下版本中,這兩個功能都可以正常工作。

%sql select date_add(cast('1964-05-23' as date), '12.34')

導致

您試圖使用小數或字符串值作為第二個參數。

在Spark 2.4及以下版本中,如果第二個參數是小數或字符串值,則強製將其轉換為int價值之前date_add ()date_sub ()是評估。

使用上麵列出的示例代碼,值12.34被轉換為12之前date_add ()是評估。

在Spark 3.0中,如果第二個參數是小數或字符串值,則返回錯誤。

解決方案

使用int短整型,或非常小的整數的第二個參數date_add ()date_sub ()功能。

複製到clipboardCopy select date_add(cast('1964-05-23' as date), '12')

這兩個例子在Spark 3.0中都能正常工作。

刪除

信息

如果要從另一個源導入此數據,則應該創建一個例程來清除值,並在將數據傳遞給其中一個日期函數之前確保數據是整數形式。