【发布时间】:2022-01-26 21:23:10
【问题描述】:
我正在努力在 Pyspark 中替换为 regexp_replace。我必须关注字符串列:
"1233455666, 'ThisIsMyAdress, 1234AB', 24234234234"
更好地了解字符串:
| Id | Address | Code |
|---|---|---|
| 1233455666 | 'ThisIsMyAdress, 1234AB' | 24234234234 |
我接收和处理的总字符串是用逗号分隔的,就像开头的例子一样。不幸的是,我无法更改这种交付数据的格式。为了很好地处理数据,我想将引号之间的逗号替换为空。
唯一的要求是使用regexp_replace。
我已经尝试了下面的代码,还有更多。但是使用这些代码,逗号分隔也会中断。那么这个字符串就是一个去掉逗号的大字符串。
.withColumn("ColCommasRemoved" , regexp_replace( col("X"), "[,]", ""))
这给了我这个输出:
"1233455666 'ThisIsMyAdress 1234AB' 24234234234"
我想要实现的输出:
"1233455666, 'ThisIsMyAdress 1234AB', 24234234234"
【问题讨论】:
-
如果没有 UDF,将很难避免使用
regexp_replace( col("X"), "('[^',]*),([^']*')", "$1$2" )时会遇到的多种边缘情况 -
逗号在逗号分隔的文件中完全有效,只要它们被引用。为什么需要这样做?
-
在后面的步骤中,我们根据逗号拆分为数据框的列。当@TimRoberts 中有那个逗号时,这个过程现在中断了。是的,也许解决方案的设计并不完美,但它是一种遗留脚本。
-
使用标准机制解析这些行不是更好吗?
-
我的主要目标是替换引号内的逗号。在当前解决方案中尝试了您的解决方案,不幸的是@blackbishop
标签: python regex apache-spark pyspark apache-spark-sql