#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; вместо явного и .