我正在研究将正则表达式应用于PySpark DataFrame列。
我不能发生重现PySpark我的工作的结果,正则表达式上regex101运行在这里。
我已经尝试了几种方法(见下文),但似乎都没有用(甚至已经在特定的Java regex引擎上进行了测试)。我希望获取上面示例中显示的组。
(\w+(?:\s*|\d*)\s+RUE\s.*)
[\s\-]+(\d*\s*RUE\s+.*)
代码示例:
df = spark.createDataFrame([
('RESIDENCE LA VENDEENNE 80 81 RUE LOUIS LUMIERE',)
], ["adresse1"])
df.withColumn("adresse1", regexp_replace("adresse1", "(\w+(?:\s*|\d*)\s+RUE\s.*)", '$1')).show(truncate=False)
我得到的输出是我未更改的列:
+-----------------------------------------------+
|adresse1 |
+-----------------------------------------------+
|RESIDENCE LA VENDEENNE 80 81 RUE LOUIS LUMIERE|
+-----------------------------------------------+
当我期望该列的价值为
81 RUE LOUIS LUMIERE
到目前为止,我完全没有任何猜测,尤其是当我之前的那些按预期工作时(匹配)。
Spark配置
我认为您应该使用regexp_extract
而不是regexp_replace
:
from pyspark.sql.functions import regexp_extract
df.withColumn(
"adresse1",
regexp_extract("adresse1", r"(\w+(?:\s*|\d*)\s+RUE\s.*)", 1)
).show(truncate=False)
#+--------------------+
#|adresse1 |
#+--------------------+
#|81 RUE LOUIS LUMIERE|
#+--------------------+
要在模式不匹配时保持列值不变,可以使用pyspark.sql.Column.rlike
和when
:
from pyspark.sql.functions import col, when
pat = r"(\w+(?:\s*|\d*)\s+RUE\s.*)"
df.withColumn(
"adresse1",
when(
col("adresse1").rlike(pat), regexp_extract("adresse1", pat, 1)
).otherwise(col("adresse1"))
).show(truncate=False)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句