PySpark的RDD是否支持按两个分隔符拆分字符串值?
RDD按多个分隔符拆分值的实现方法
方案1:使用正则拆分(推荐)
Python标准库的re模块split方法支持传入正则表达式匹配多个分隔符,直接匹配;和\n即可,可额外过滤拆分后产生的空字符串,避免末尾换行符产生无效空元素。
代码示例:
import re # 按;或\n拆分,同时过滤空串 rdd = rdd.mapValues(lambda t: [item for item in re.split(r'[;\n]', t) if item])
如果确认数据不会产生空拆分结果,可简化为:
rdd = rdd.mapValues(lambda t: re.split(r'[;\n]', t))
对应用户给出的测试数据,拆分后第二个值的输出结果为:['date', 'type', 'value', '2017-11-11 08:32:46.934', 'no_error', '54.64325', '2017-11-11 08:32:47.356', 'no:error', '35.46643']
方案2:替换分隔符后统一拆分
如果不想引入正则模块,也可以先把所有\n替换为;,再统一按;拆分,逻辑更直白:
代码示例:
rdd = rdd.mapValues(lambda t: [item for item in t.replace('\n', ';').split(';') if item])
两种方案效果完全一致,可根据使用习惯选择。
内容的提问来源于stack exchange,提问作者carbassot
相关产品推荐
相关产品推荐

