将与正则表达式匹配的所有模式过滤为PySpark中RDD中的单独行

尼基尔宝贝

我有一个.csv文件,其记录写为单行而不是单独的行。我能够使用regex匹配每一行的模式(?:"([a-zA-Z0-9 /\-\:\.\,]+)",|\\N,|"",|""){26}

我有以下代码读取.csv文件,并使用指定模式re

textFile = sc.textFile("/home/Stores.csv")
import re
pattern = re.compile('(?:"([a-zA-Z0-9 /\-\:\.\,]+)",|\\N,|"",|""){26}')

是否可以执行下面的代码来将.csv文件拆分为单独的行?

textFile.flatMap(lambda x: pattern.split(x)).collect()

上面的代码不起作用。请帮助我使用PySpark使用模式将单行拆分为多行。

用户名

您能否显示在Python中对文件的一部分进行操作的“模式”示例?

当我运行类似的东西时,它似乎可以工作。

import re
pattern = re.compile('\s+')
text = "abxd 4567 tyreyr fgdf"

print pattern.split(text)

result = sc.parallelize([text])
print result.flatMap(lambda x: pattern.split(x)).collect()

版画

['abxd', '4567', 'tyreyr', 'fgdf']
['abxd', '4567', 'tyreyr', 'fgdf']

编辑:好的,这如何:

import re
pattern = re.compile('(?:"([a-zA-Z0-9 /\-\:\.\,]+)",|\\N,|"",|"")')
text = '"40","353","xyz","xyz","zyx353","1","26","1","dd/mm","5","0",\N,\N,"0","0","dd/mm","one",\N,\N,"0","2015-08-06 13:12:30.557000",\N,"two","",\N,"""66","1090","abc","abc1","abc1090","1","6","1","dd/mm","5","1",\N,\N,\N,"1","dd/mm","one",\N,\N,"0","2015-09-04 17:28:00.323000",\N,"two",\N,\N,"""80","1326","kmy","kmy","kmiii","1","26","1","dd/mm","5","0",\N,\N,"0","0","dd/mm","Active",\N,\N,"0","2015-09-30 11:49:47.857000",\N,"two",\N,\N,"""81","1332","haii","haii","haiii","1","26","1","dd/mm","5","1",\N,\N,"0","0","dd/mm","one",\N,\N,"0","2015-10-01 15:59:11.843000",\N,"two","",\N,""'
result_list =  pattern.findall(text)
print [result_list[x:x+26] for x in xrange(0, len(result_list), 26)]

result = sc.parallelize([text])

def split_my_file(row, pattern):
    result_list =  pattern.findall(row)
    return [result_list[x:x+26] for x in xrange(0, len(result_list), 26)]

print result.flatMap(lambda x: split_my_file(x, pattern)).collect()

结果:

[['40', '353', 'xyz', 'xyz', 'zyx353', '1', '26', '1', 'dd/mm', '5', '0', '', '', '0', '0', 'dd/mm', 'one', '', '', '0', '2015-08-06 13:12:30.557000', '', 'two', '', '', ''], ['66', '1090', 'abc', 'abc1', 'abc1090', '1', '6', '1', 'dd/mm', '5', '1', '', '', '', '1', 'dd/mm', 'one', '', '', '0', '2015-09-04 17:28:00.323000', '', 'two', '', '', ''], ['80', '1326', 'kmy', 'kmy', 'kmiii', '1', '26', '1', 'dd/mm', '5', '0', '', '', '0', '0', 'dd/mm', 'Active', '', '', '0', '2015-09-30 11:49:47.857000', '', 'two', '', '', ''], ['81', '1332', 'haii', 'haii', 'haiii', '1', '26', '1', 'dd/mm', '5', '1', '', '', '0', '0', 'dd/mm', 'one', '', '', '0', '2015-10-01 15:59:11.843000', '', 'two', '', '', '']]
[['40', '353', 'xyz', 'xyz', 'zyx353', '1', '26', '1', 'dd/mm', '5', '0', '', '', '0', '0', 'dd/mm', 'one', '', '', '0', '2015-08-06 13:12:30.557000', '', 'two', '', '', ''], ['66', '1090', 'abc', 'abc1', 'abc1090', '1', '6', '1', 'dd/mm', '5', '1', '', '', '', '1', 'dd/mm', 'one', '', '', '0', '2015-09-04 17:28:00.323000', '', 'two', '', '', ''], ['80', '1326', 'kmy', 'kmy', 'kmiii', '1', '26', '1', 'dd/mm', '5', '0', '', '', '0', '0', 'dd/mm', 'Active', '', '', '0', '2015-09-30 11:49:47.857000', '', 'two', '', '', ''], ['81', '1332', 'haii', 'haii', 'haiii', '1', '26', '1', 'dd/mm', '5', '1', '', '', '0', '0', 'dd/mm', 'one', '', '', '0', '2015-10-01 15:59:11.843000', '', 'two', '', '', '']]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

正则表达式用于单独行中的单词

检索与Perl中的所有正则表达式完全匹配的模式

正则表达式匹配所有内容,直到模式中包含异常

将Textpad或Notepad ++中的所有正则表达式匹配项导出为列表

正则表达式模式以匹配所有标签

正则表达式匹配正则表达式模式之外的所有内容

正则表达式模式,与匹配模式的正则表达式模式的所有可能变体匹配

正则表达式子方法不会替换python正则表达式中的所有匹配项

Java中的正则表达式匹配模式

模式匹配 Scala 中的正则表达式数组

匹配正则表达式中的重复模式

在Java正则表达式中匹配错误的模式

Android中匹配正则表达式模式的问题

Lua正则表达式匹配makefile中的模式

正则表达式以匹配HTML代码中的模式

正则表达式在模式中匹配名称

在 Python 中匹配多行正则表达式模式

正则表达式模式无法在python中匹配

python中的负正则表达式模式匹配

python中的正则表达式模式匹配

Scala中多个正则表达式的模式匹配

CloudWatch事件模式匹配中的正则表达式

正则表达式用于XSD中的模式匹配

正则表达式:匹配引用文本中的模式

JavaScript 中的正则表达式模式匹配?

匹配除复杂正则表达式模式之外的所有内容并在 Pandas 中替换它

正则表达式模式在AWK中为变量

正则表达式中的负向提前匹配所有匹配的字符

正则表达式将匹配项中的所有匹配项替换x次