Я пытаюсь найти все тексты, которые содержат хотя бы одно ключевое слово в списке приведенных ключевых слов. Это похоже на ответ: Строка, содержащая точную подстроку из списка подстрок
Однако мне нужно расширить ее, чтобы она могла работать с несколькими словами, например, сопоставляя слова «соединенные штаты» ине просто «США».
val df = spark.createDataFrame(Seq(
(1, "usa of america"),
(2, "usa"),
(4, "united states of america"),
(5, "states"),
(6, "united states")
)).toDF("id", "country")
df.registerTempTable("df")
val valid_names = Set("usa", "united states")
def udf_check_country(valid_words: Set[String]) = { udf {(words: String) => words.split(" ").exists(valid_words.contains) } }
var df2 = df.withColumn("udf_check_country", udf_check_country(valid_names)($"country"))
df2.registerTempTable("df2")
df2.show()
Где я получаю новый столбец с ошибкой в последнем случае 'United States'.
+---+--------------------+-----------------+
| id| country|udf_check_country|
+---+--------------------+-----------------+
| 1| usa of america| true|
| 2| usa| true|
| 4|united states of ...| false|
| 5| states| false|
| 6| united states| false|
+---+--------------------+-----------------+
Как я могу заставить его работать для ключевых слов с несколькими словами?