包含字符串列表中的确切字符串的文本
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
。
我试图在给定的关键字列表中查找至少包含一个关键字的所有文本。
这类似于此答案:
但是,我需要扩展它以便它可以处理多个单词,例如匹配 '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
。