gpt4 book ai didi

regex - 使用正则表达式在Spark中联接两个数据框

转载 作者:行者123 更新时间:2023-12-03 16:10:21 25 4
gpt4 key购买 nike

假设我有一个数据框df1,其“列颜色”列包含一堆颜色,另一个数据框df2,其列“短语”包含数列短语。
我想加入两个数据框,其中d1中的颜色出现在d2中的短语中。我无法使用d1.join(d2, d2("phrases").contains(d1("color")),因为它会连接到单词在短语中出现的任何位置。我不想匹配例如scaRED之类的单词,其中RED是另一个单词的一部分。我只想在颜色在短语中显示为单独的单词时加入。
我可以使用正则表达式解决此问题吗?需要引用表达式中的列时,可以使用什么函数?语法如何?

最佳答案

您可以创建一个REGEX模式,以在匹配\b时检查单词边界(colors),并使用 regexp_replace 检查作为join条件:

val df1 = Seq(
(1, "red"), (2, "green"), (3, "blue")
).toDF("id", "color")

val df2 = Seq(
"red apple", "scared cat", "blue sky", "green hornet"
).toDF("phrase")

val patternCol = concat(lit("\\b"), df1("color"), lit("\\b"))

df1.join(df2, regexp_replace(df2("phrase"), patternCol, lit("")) =!= df2("phrase")).
show
// +---+-----+------------+
// | id|color| phrase|
// +---+-----+------------+
// | 1| red| red apple|
// | 3| blue| blue sky|
// | 2|green|green hornet|
// +---+-----+------------+
注意,在没有封闭的单词边界的情况下,“害怕的猫”将是一个匹配项。

关于regex - 使用正则表达式在Spark中联接两个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64034185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com