Pyspark:Regex_replace 引号之间的逗号
Pyspark: Regex_replace commas between quotes
我正在努力用 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"
使用regexp_replace
:
from pyspark.sql import functions as F
df = spark.createDataFrame([("1233455666, 'ThisIsMyAdress, 1234AB', 24234234234",)], ["X"])
result = df.withColumn(
"ColCommasRemoved",
F.split(F.regexp_replace("X", ",(?=[^']*'[^']*(?:'[^']*'[^']*)*$)", ""), ",")
).select(
F.col("ColCommasRemoved")[0].alias("ID"),
F.col("ColCommasRemoved")[1].alias("Address"),
F.col("ColCommasRemoved")[2].alias("Code")
)
result.show()
#+----------+------------------------+------------+
#|ID |Address |Code |
#+----------+------------------------+------------+
#|1233455666| 'ThisIsMyAdress 1234AB'| 24234234234|
#+----------+------------------------+------------+
或者如果您想直接将原始列拆分为 ,
并忽略引号内的内容:
result = df.withColumn(
"split",
F.split(F.col("X"), ",(?=(?:[^']*'[^']*')*[^']*$)")
)
result.show(truncate=False)
#+-------------------------------------------------+-----------------------------------------------------+
#|X |split |
#+-------------------------------------------------+-----------------------------------------------------+
#|1233455666, 'ThisIsMyAdress, 1234AB', 24234234234|[1233455666, 'ThisIsMyAdress, 1234AB', 24234234234]|
#+-------------------------------------------------+-----------------------------------------------------+
我正在努力用 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"
使用regexp_replace
:
from pyspark.sql import functions as F
df = spark.createDataFrame([("1233455666, 'ThisIsMyAdress, 1234AB', 24234234234",)], ["X"])
result = df.withColumn(
"ColCommasRemoved",
F.split(F.regexp_replace("X", ",(?=[^']*'[^']*(?:'[^']*'[^']*)*$)", ""), ",")
).select(
F.col("ColCommasRemoved")[0].alias("ID"),
F.col("ColCommasRemoved")[1].alias("Address"),
F.col("ColCommasRemoved")[2].alias("Code")
)
result.show()
#+----------+------------------------+------------+
#|ID |Address |Code |
#+----------+------------------------+------------+
#|1233455666| 'ThisIsMyAdress 1234AB'| 24234234234|
#+----------+------------------------+------------+
或者如果您想直接将原始列拆分为 ,
并忽略引号内的内容:
result = df.withColumn(
"split",
F.split(F.col("X"), ",(?=(?:[^']*'[^']*')*[^']*$)")
)
result.show(truncate=False)
#+-------------------------------------------------+-----------------------------------------------------+
#|X |split |
#+-------------------------------------------------+-----------------------------------------------------+
#|1233455666, 'ThisIsMyAdress, 1234AB', 24234234234|[1233455666, 'ThisIsMyAdress, 1234AB', 24234234234]|
#+-------------------------------------------------+-----------------------------------------------------+