包含字符串列表中的确切字符串的文本

Text containing exact string from list of strings

我试图在给定的关键字列表中查找至少包含一个关键字的所有文本。 这类似于此答案:

但是,我需要扩展它以便它可以处理多个单词,例如匹配 'united states' 而不是简单地 'usa'。


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|
+---+--------------------+-----------------+

如何让它适用于包含多个词的关键字?

根据您的规则,您可以简单地添加另一个条件对整个字符串迭代 valid_names,例如:

valid_words.exists(words.contains) || words.split(" ").exists(valid_words.contains)

这将使 id 4 和 6 也 return true