计算 pyspark 数据框中的逗号数量并排除双引号内的逗号

问题描述 投票:0回答:1

我在 pyspark 数据框列名称文本(单列)中存在以下字符串。

30,kUsUO,6,18,97,42,"SAM,K,卡兰",lmhYK,49,阿拉塔,51,34,3,49,75,39,pdwvW,54,7,63,12,25 ,26,SJ12u,rUFUV,34,xXBv3,XHtz4,r4Fyh,14,20,0jZL2,izrsC,44,K5Kw3,8,tcKu7,5,RPLcy,kg4IR,Kvs3p,lyG09,dJmZB,34,84,7,qED2y ,8uNen,5,96,81,88,bGgqK,FAsIV,81,YXZ,PQR,"B1002 号公寓, Balaji Whitefield 协会, sus 路, 浦那,Mh",22,591213,LbAo7,21,18,text, ,,,,

我在这里需要计算该列(文本)中存在的逗号数量,但它应该排除双引号内存在的逗号

因此正则表达式应排除双引号内出现的逗号

“萨姆、K、卡兰” “B1002 号公寓,巴拉吉·怀特菲尔德协会,sus 路,浦那,Mh”

所以这里正确的计数是 68(不包括双引号内的逗号)

为了实现这一点,我使用了下面的代码,但是这个表达式需要时间。由于该数据框中存在 1 亿条记录,因此我正在寻找更好的方法。

# Regular expression to count commas not within double quotes
df = df.withColumn(
    "CommaCount",
    F.size(F.split(F.col("SingleColumn"), r',(?=(?:[^"]*"[^"]*")*[^"]*$)')) - 1
)

任何帮助表示赞赏

dataframe pyspark databricks
1个回答
0
投票

您可以计算逗号总数并减去双引号中的逗号:

import re
str = '30,kUsUO,6,18,97,42,"SAM,K,KARAN",lmhYK,49,aLaTA,51,34,3,49,75,39,pdwvW,54,7,63,12,25,26,SJ12u,rUFUV,34,xXBv3,XHtz4,r4Fyh,14,20,0jZL2,izrsC,44,K5Kw3,8,tcKu7,5,RPLcy,kg4IR,Kvs3p,lyG09,dJmZB,34,84,7,qED2y,8uNen,5,96,81,88,bGgqK,FAsIV,81,YXZ,PQR,"Flat No B1002, Balaji Whitefield society, sus road, pune,Mh",22,591213,LbAo7,21,18,text,,,,,'
print(str.count(',') - sum(s.count(',') for s in re.findall('"([^"]*)"', str)))

结果:

68
© www.soinside.com 2019 - 2024. All rights reserved.