Pyspark.sql regexp_extract不返回完整组

时间:2019-09-23 11:01:12

标签: regex pyspark-sql pyspark-dataframes

我有一个数据框,其中有一列带有字符串,其子字符串由固定的定界符分隔。我想通过Pyspark.sql regexp_extract函数在每个字符串中提取唯一的子字符串。 首先,让我创建一个可复制的示例:

import pyspark.sql.functions as F    
import random
random.seed(1)

df = sc.parallelize([(
    random.choice(["a", "b", "c"]),
    random.choice(["foo", "bar", "fool"]),
) for _ in range(100)]).toDF(["c1", "c2"])

df2 = (df
       .groupBy("c1")
       .agg(F.concat_ws("; ", F.collect_list(F.col("c2"))).alias("c2"))
       )

现在我正在尝试将唯一的子字符串放入新列

df3 = df2.withColumn("c3",
                     F.regexp_extract(
                        "c2",
                        # unique substrings separated by semicolons
                        "(?<=\s|^)([^;]+)(?=;|$)(?!.*\b\1\b)",
                        1
                        )
                     )

但是正则表达式只返回组中的第一个匹配项:

+---+--------------------+---+
| c1|                  c2| c3|
+---+--------------------+---+
|  c|bar; bar; bar; ba...|bar|
|  b|bar; bar; bar; ba...|bar|
|  a|bar; bar; bar; ba...|bar|
+---+--------------------+---+

正则表达式字符串应以此判断: Testing the regex at Regex101

所以我不太确定为什么在数据框中只提取第一个匹配项而不提取整个组。感谢您的帮助/解释!

0 个答案:

没有答案