删除Spark中RDD行中的连续空格

时间:2016-06-16 08:15:30

标签: regex scala apache-spark

经过大量程序化清理后,我的数据集如下所示(此处显示部分数据集)。

ABCD        A M@L                             79
BGDA        F D@L                             89

我想将其转换为以下内容以进一步进行Spark Dataframe操作

ABCD,A,M@L,79
BGDA,F,D@L,89


val reg = """/\s{2,}/"""
val cleanedRDD2 = cleanedRDD1.filter(x=> !reg.pattern.matcher(x).matches())

但这没有任何回报。如何使用分隔符查找和替换空字符串? 谢谢! 室温

2 个答案:

答案 0 :(得分:1)

您似乎只想替换字符串数据中的所有非垂直空格。我建议使用replaceAll(将所有与模式匹配的文本替换为[\t\p{Zs}]+正则表达式。

这只是一个sample code

val s = "ABCD        A M@L                             79\nBGDA        F D@L                             89"
val reg = """[\t\p{Zs}]+"""
val cleanedRDD2 = s.replaceAll(reg, ",")
print(cleanedRDD2)
// =>  ABCD,A,M@L,79
//     BGDA,F,D@L,89

这是regex demo[\t\p{Zs}]+匹配一个或多个标签页(\t)或来自Space Separator category的任何Unicode空格。

要修改RDD的内容,只需使用.map

newRDD = yourRDD.map(elt => elt.replaceAll("""[\t\p{Zs}]+""", ","))

答案 1 :(得分:0)

如果您想直接在RDD上使用

rdd_nopunc = rdd.flatMap(lambda x: x.split()).filter(lambda x: x.replace("[,.!?:;]", ""))