Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在pyspark中使用rlike连接数据帧时包括括号_Regex_Apache Spark_Pyspark_Rlike - Fatal编程技术网

Regex 在pyspark中使用rlike连接数据帧时包括括号

Regex 在pyspark中使用rlike连接数据帧时包括括号,regex,apache-spark,pyspark,rlike,Regex,Apache Spark,Pyspark,Rlike,我有2个pyspark数据帧,我正在尝试连接其中的一些列中有括号的值。 例如,其中一个值是 "Mangy (Dog)" 如果我尝试这样加入: df1.join(df2 expr("df1.animal rlike df2.animal_stat") 我没有得到任何结果。 因此,我尝试使用rlike进行过滤,看看是否能够捕获值 过滤作用于除带括号的值以外的所有值。例如,当我尝试这样过滤时: df.filter(col('animal').rlike(&q

我有2个pyspark数据帧,我正在尝试连接其中的一些列中有括号的值。 例如,其中一个值是

"Mangy (Dog)"
如果我尝试这样加入:

df1.join(df2 expr("df1.animal rlike df2.animal_stat")
我没有得到任何结果。 因此,我尝试使用
rlike
进行过滤,看看是否能够捕获值

过滤作用于除带括号的值以外的所有值。例如,当我尝试这样过滤时:

df.filter(col('animal').rlike("Mangy (Dog)")).show()
我没有得到任何结果

但是,如果我使用
rlike(“Mangy”)
rlike(“(狗)”
进行过滤,它似乎可以工作。即使我在
(狗)
中指定了括号

有没有办法让rlike在匹配项中包含括号

编辑: 我有两个数据帧
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)
我希望输出数据帧如下所示:

+-----------------+-------+-----------+
|           animal| origin|destination|
+-----------------+-------+-----------+
|      mangy (dog)|Streets|      House|
|              Cat|  house|    Streets|
|[Bumbling] Bufoon| Utopia|     Circus|
|          Cheetah|  Congo|        Zoo|
|(Sprawling) Snake| Amazon|  Glass Box|
+-----------------+-------+-----------+
.rlike()

df.filter(col('animal').rlike(“Mangy\(Dog\))).show()
如果没有一些示例数据,我不确定是否可以帮助解决原始加入问题。

编辑:

combine = df1.alias('df1').join(
    df2.withColumn('animal_stat', F.regexp_replace(F.regexp_replace(F.regexp_replace(F.regexp_replace('animal_stat', '\\(', '\\\\('), '\\)', '\\\\)'), '\\[', '\\\\['), '\\]', '\\\\]')).alias('df2'), 
    F.expr('df1.animal rlike df2.animal_stat'),
    'left'
)

如果您没有使用任何正则表达式,您可能希望使用
like
而不是
rlike

df1.join(df2, expr("df1.animal like concat('%', df2.animal_stat, '%')"))

要进行筛选,可以尝试

df.filter(col('animal').like("%Mangy (Dog)%")).show()

谢谢你的回答。我已经编辑了我的帖子,并为
rlike
连接添加了示例数据。谢谢你的回答。我实际上在使用正则表达式。有没有办法在不指定字符串部分的连接中使用
rlike
呢?我过滤是为了排除故障,但
rlike
的主要用途是连接在包含正则表达式的列上。我编辑了我的帖子以显示相同的正则表达式。正则表达式与第一行和最后一行不匹配。您如何判断括号是否是正则表达式的一部分?例如,可能您正在尝试匹配
[Bumbling]中的任何字符
因为您将其括在方括号中?在我的用例中,方括号(圆括号或方括号)永远不会是正则表达式的一部分。它应该是要匹配的字符串的一部分。如果可以,这取决于您是否希望将圆括号保留在要匹配的模式中