我很新兴。我正在尝试使用rdds。所以这是我的基本rdd
rdd=sc.parallelize(['"ab,cd",9', 'xyz,6'])
现在如果我想在逗号上拆分它
rdd.map(lambda x:x.split(",")).collect()
给了我
[['ab', 'cd', '9'], ['xyz', '6']]
由于我想忽略放在""中的文字之间的逗号,我写了
rdd.map(lambda x:x.split(",(?=([^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)")).collect()
给出输出
[['ab,cd,9'], ['xyz,6']]
(因此这不是一个重复的问题)
但是我希望输出类似于.split(",")
那样的输出
[['ab,cd','9'], ['xyz','6']]
我对正则表达式不是很好,所以我不知道如何操纵它来获得输出。 任何帮助将不胜感激
答案 0 :(得分:0)
您可以使用this answer修改,
代替;
的模式:
import re
pattern = r"""((?:[^,"']|"[^"]*"|'[^']*')+)"""
rdd.map(lambda x: re.split(pattern , x)[1::2]).collect()
#[['"ab,cd"', '9'], ['xyz', '6']]
[1::2]
表示从列表1开始,列出列表中的所有其他项目。更多关于understanding python's slice notation。
此模式匹配字段(不是分隔符),因此如果没有切片,您将获得:
[['', '"ab,cd"', ',', '9', ''], ['', 'xyz', ',', '6', '']]
更新
如果您只想忽略双引号(而不是单引号)之间的分隔符,则可以按如下方式修改模式:
pattern = r"""((?:[^,"]|"[^"]*")+)"""
rdd=sc.parallelize(["xy'z,6",'"ab,cd",5'])
rdd.map(lambda x: re.split(pattern , x)[1::2]).collect()
#[["xy'z", '6'], ['"ab,cd"', '5']]