我有一个数据框,其中有一列带有字符串,其子字符串由固定的定界符分隔。我想通过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|
+---+--------------------+---+
所以我不太确定为什么在数据框中只提取第一个匹配项而不提取整个组。感谢您的帮助/解释!