Искровой случай Scala при наличии нескольких условий

#scala #dataframe #apache-spark #case

#scala #фрейм данных #apache-spark #случай

Вопрос:

Я пытаюсь выполнить проверку на DF, который у меня есть, но я получаю сообщение об ошибке. Я хочу реализовать это с помощью встроенных функций spark — с помощью столбца, когда, в противном случае:

 CASE WHEN vehicle="BMW" 
AND MODEL IN ("2020","2019","2018","2017") 
AND value> 100000 THEN 1
ELSE 0 END AS NEW_COLUMN
  

В настоящее время у меня есть это

 DF.withColumn(NEW_COLUMN, when(col(vehicle) === "BMW" 
and col(model) isin(listOfYears:_*) 
and col(value) > 100000, 1).otherwise(0))
  

Но я получаю сообщение об ошибке из-за несоответствия типов данных (логическое значение и строка)… Я понимаю, что мое условие возвращает логические значения и строки, что вызывает ошибку. Каков правильный синтаксис для выполнения подобного случая? кроме того, я использовал amp;amp; вместо и, но третий amp;amp; выдавал мне «не удается разрешить символ amp;amp;»

Спасибо за помощь!

Комментарии:

1. итак NEW_COLUMN , vehicle , model и т.д. являются переменными типа String ? Если это так, этот код выполняется нормально. Вы implicits импортировали?

Ответ №1:

Я думаю, что amp;amp; правильно — со встроенными функциями spark все выражения имеют тип Column, проверка API, на который он похож amp;amp; , правильна и должна работать нормально. Может ли это быть так же просто, как проблема с порядком операций, когда вам нужны круглые скобки вокруг каждого из логических условий? Функция / «оператор» isin будет иметь более низкий приоритет, чем amp;amp; , что может привести к сбоям.

Комментарии:

1. Это было из-за круглых скобок, ха-ха, я понятия не имел. Спасибо! теперь он работает и с amp;amp; вместо явного и .