As funções de data só aceitam valores int em Apache Spark 3.0

Problema

Está a tentar utilizar as date_add() funções ou date_sub() funções no Spark 3.0, mas estão a devolver uma mensagem de Error in SQL statement: AnalysisException erro.

Na Faísca 2.4 e abaixo, ambas as funções funcionam normalmente.

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

Causa

Está a tentar usar um valor fracional ou de corda como segundo argumento.

Na Faísca 2.4 e abaixo, se o segundo argumento for um valor fracionado ou de corda, é coagido a um int valor antes ou é date_add() date_sub() avaliado.

Utilizando o código de exemplo listado acima, o valor 12.34 é convertido antes de ser 12 date_add() avaliado.

Na Faísca 3.0, se o segundo argumento for um valor fracionado ou de corda, retorna um erro.

Solução

Utilizar int smallint , ou tinyint valores como segundo argumento para o date_add() ou date_sub() funções em Spark 3.0.

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

Ambos os exemplos funcionam corretamente na Spark 3.0.

Nota

Se estiver a importar estes dados de outra fonte, deverá criar uma rotina para higienizar os valores e garantir que os dados estão em forma de inteiro antes de os passar para uma das funções da data.