我有2个pysparkDataframe,我正在尝试连接其中列中的一些值有括号。例如,其中一个值是
"Mangy (Dog)"
如果我试着这样加入:
df1.join(df2 expr("df1.animal rlike df2.animal_stat")
我没有任何结果。所以我试着用 rlike
只是想看看我是否能捕捉到这些价值观。
过滤作用于除带括号的值以外的所有值。例如,当我尝试这样过滤时:
df.filter(col('animal').rlike("Mangy (Dog)")).show()
我没有任何结果。
但是,如果我用 rlike("Mangy")
或者 rlike("(Dog)"
好像有用。即使我在 (Dog)
.
有没有办法让rlike在匹配项中包含括号?
编辑:我有2个Dataframe df1
以及 df2
像这样:
+-----------------+-------+
| animal| origin|
+-----------------+-------+
| mangy (dog)|Streets|
| Cat| house|
|[Bumbling] Bufoon| Utopia|
| Cheetah| Congo|
|(Sprawling) Snake| Amazon|
+-----------------+-------+
+-------------------+-----------+
| animal_stat|destination|
+-------------------+-----------+
| ^dog$| House|
| ^Cat$| Streets|
|^[Bumbling] Bufoon$| Circus|
| ^Cheetah$| Zoo|
| ^(Sprawling)$| Glass Box|
+-------------------+-----------+
我正试着用 rlike
使用以下方法:
dff1=df1.alias('dff1')
dff2=df2.alias('dff2')
combine=dff1.join(dff2, expr("dff1.animal rlike dff2.animal_stat"), how='left')
.drop(dff2.animal_stat)
我希望输出Dataframe如下:
+-----------------+-------+-----------+
| animal| origin|destination|
+-----------------+-------+-----------+
| mangy (dog)|Streets| House|
| Cat| house| Streets|
|[Bumbling] Bufoon| Utopia| Circus|
| Cheetah| Congo| Zoo|
|(Sprawling) Snake| Amazon| Glass Box|
+-----------------+-------+-----------+
2条答案
按热度按时间wfauudbj1#
编辑:
如果您没有使用任何正则表达式,那么您可能希望使用
like
而不是rlike
. 例如,你可以要做过滤器,你可以试试
m528fe3b2#
.rlike()
与相同.like()
但它使用正则表达式。你需要对括号进行转义。尝试如下过滤:如果没有一些示例数据,我不确定是否可以帮助解决原始连接问题。