经过大量程序化清理后,我的数据集如下所示(此处显示部分数据集)。
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())
但这没有任何回报。如何使用分隔符查找和替换空字符串? 谢谢! 室温
答案 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("[,.!?:;]", ""))