Datum funktioner accepterar bara int-värden i Apache Spark 3,0

Problem

Du försöker använda date_add() eller date_sub() -funktionerna i Spark 3,0, men de returnerar ett Error in SQL statement: AnalysisException fel meddelande.

I Spark 2,4 och nedan fungerar båda funktionerna som normalt.

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

Orsak

Du försöker använda ett bråk tals-eller sträng värde som det andra argumentet.

I Spark 2,4 och nedan, om det andra argumentet är ett bråk tals-eller sträng värde, tvingas det till ett int värde före date_add() eller date_sub() utvärderas.

Med hjälp av exempel koden som anges ovan, 12.34 konverteras värdet till 12 innan date_add() utvärderas.

Om det andra argumentet är ett bråk tals-eller sträng värde i Spark 3,0 returneras ett fel.

Lösning

Använd int smallint värden, eller tinyint som det andra argumentet för date_add() date_sub() funktionerna eller i Spark 3,0.

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

Båda dessa exempel fungerar korrekt i Spark 3,0.

Anteckning

Om du importerar dessa data från en annan källa bör du skapa en rutin för att sanera värdena och se till att data är i heltals form innan du skickar dem till en av datum funktionerna.