У меня есть следующий Spark scala dataframe.
val someDF = Seq(
(1, "bat",1.3222),
(4, "cbat",1.40222),
(3, "horse",1.501212)
).toDF("number", "word","value")
Я создал пользовательскую функцию (UDF) для создания новой переменной следующим образом:
Logi c: если слова равны bat, то значение равно нулю.
import org.apache.spark.sql.functions.{col}
val func1 = udf( (s:String ,y:Double) => if(s.contains("bat")) y else 0 )
func1(col("word"),col("value"))
+------+-----+-------+
|number| word|cal_var|
+------+-----+-------+
| 1| bat| 1.3222|
| 4| cbat|1.40222|
| 3|horse| 0.0|
+------+-----+-------+
Здесь, чтобы проверить равенство, я использовал contains
функцию. Из-за этого я получаю неправильный вывод. Мой желаемый результат должен быть таким:
+------+-----+-------+
|number| word|cal_var|
+------+-----+-------+
| 1| bat| 1.3222|
| 4| cbat| 0.0|
| 3|horse| 0.0|
+------+-----+-------+
Может кто-нибудь помочь мне выяснить правильную строковую функцию, которую я должен использовать, чтобы проверить равенство?
Спасибо