日期函数仅接受 Apache Spark 3.0 中的 int 值

问题

你正尝试在 Spark 3.0 中使用 date_add()date_sub() 函数,但它们返回了一条 Error in SQL statement: AnalysisException 错误消息。

在 Spark 2.4 及更低版本中,两个函数均正常运行。

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

原因

你尝试使用小数或字符串值作为第二个参数。

在 Spark 2.4 及更低版本中,如果第二个参数是小数或字符串值,则会在计算 date_add()date_sub() 之前将其强制转换为 int 值。

使用上面列出的示例代码,在计算 date_add() 之前,值 12.34 被转换为 12

在 Spark 3.0 中,如果第二个参数是小数或字符串值,则它将返回错误。

解决方案

在 Spark 3.0 中,将 intsmallinttinyint 值用作 date_add()date_sub() 函数的第二个参数。

select date_add(cast('1964-05-23' as date), '12')
select date_add(cast('1964-05-23' as date), 12)

这两个示例在 Spark 3.0 中均可正常工作。

注意

如果要从另一个源导入此数据,则应创建一个例程来清理这些值,并确保数据是整数形式,然后再将其传递给某个日期函数。