string_integers.txt
a 1 2 3
b 4 5 6
c 7 8 9
sample.py
import re
pattern = re.compile("(^[a-z]+)\s")
txt = sc.textFile("string_integers.txt")
string_integers_separated = txt.map(lambda x: pattern.split(x))
print string_integers_separated.collect()
结果
[[u'', u'a', u'1 2 3'], [u'', u'b', u'4 5 6'], [u'', u'c', u'7 8 9']]
预期结果
[[u'a', u'1 2 3'], [u'b', u'4 5 6'], [u'c', u'7 8 9']]
答案 0 :(得分:1)
您拆分锚定在字符串开头的模式,因此前缀将始终为空字符串。例如,您可以使用匹配:
npm uninstall -g angular-cli
npm cache clean
npm install -g angular-cli@latest
或lookbehind:
pattern = re.compile("([a-z]+)\s+(.*$)")
pattern.match("a 1 2 3").groups()
# ('a', '1 2 3')
或只是拆分:
pattern = re.compile("(?<=a)\s")
pattern.split("a 1 2 3", maxsplit=1)
# ['a', '1 2 3']
答案 1 :(得分:0)
目前我还不清楚领先的白色空间来自哪里。出于某种原因,正则表达式分裂正在引入它。 Based on an example found in this documentation创建了一个不再引入前导空格的分割操作:
txt.map(lambda x: x.split(' ', 1)).collect()
#[[u'a', u'1 2 3'], [u'b', u'4 5 6'], [u'c', u'7 8 9']]
<强>解释强>
str.split(str =&#34;&#34;,num = string.count(str))
将分割数限制为num
使用x.split(' ', 2)
返回[[u'a', u'1', u'2 3'], [u'b', u'4', u'5 6'], [u'c', u'7', u'8 9']]