如何基于通配符/正则表达式条件在Spark中加入2个数据框?

Ale*_*dar 0 scala apache-spark

我有2个数据框df1df2。假设有一location列中df1可能包含常规URL或带有通配符的URL,例如:

  • stackoverflow.com/questions/*
  • * .cnn.com
  • cnn.com/*/politics

该数据帧秒df2url场可能仅含有不带通配符有效的URL。

我需要连接这两个数据框,就像在连接条件中df1.join(df2, $"location" matches $"url")有魔术matches运算符一样。

经过一番谷歌搜索后,我仍然没有找到一种方法来实现这一目标。您将如何解决此类问题?

hi-*_*zir 5

存在“魔术”匹配运算符-称为 rlike

val df1 = Seq("stackoverflow.com/questions/.*$","^*.cnn.com$", "nn.com/*/politics").toDF("location")
val df2 = Seq("stackoverflow.com/questions/47272330").toDF("url")

df2.join(df1, expr("url rlike location")).show
+--------------------+--------------------+
|                 url|            location|
+--------------------+--------------------+
|stackoverflow.com...|stackoverflow.com...|
+--------------------+--------------------+
Run Code Online (Sandbox Code Playgroud)

但是有一些警告:

可以使用我在Apache Spark中的高效字符串匹配中描述的方法过滤候选对象