Ale*_*dar 0 scala apache-spark
我有2个数据框df1和df2。假设有一location列中df1可能包含常规URL或带有通配符的URL,例如:
该数据帧秒df2有url场可能仅含有不带通配符有效的URL。
我需要连接这两个数据框,就像在连接条件中df1.join(df2, $"location" matches $"url")有魔术matches运算符一样。
经过一番谷歌搜索后,我仍然没有找到一种方法来实现这一目标。您将如何解决此类问题?
存在“魔术”匹配运算符-称为 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)
但是有一些警告:
它使用笛卡尔积执行(如何使用SQL风格的“ LIKE”条件来联接两个Spark SQL数据帧?):
== Physical Plan ==
BroadcastNestedLoopJoin BuildRight, Inner, url#217 RLIKE location#211
:- *Project [value#215 AS url#217]
: +- *Filter isnotnull(value#215)
: +- LocalTableScan [value#215]
+- BroadcastExchange IdentityBroadcastMode
+- *Project [value#209 AS location#211]
+- *Filter isnotnull(value#209)
+- LocalTableScan [value#209]
Run Code Online (Sandbox Code Playgroud)可以使用我在Apache Spark中的高效字符串匹配中描述的方法过滤候选对象
| 归档时间: |
|
| 查看次数: |
2334 次 |
| 最近记录: |