我正在尝试使用Apache Spark从管道(" |")分隔文件生成格式化的CSV文件。输入文件包含:
苹果|球|猫
布莱克敦| Bela vista |格里纳克
X | Y | Z
我正在尝试:
val name= sc.textFile(input.txt")
val split=name.map(line=>line.split("|")).map( x => (x(0),x(2)) )
split.foreach(println)
输出:
(X,Y)
(α,β)
(B,A)
我要求的输出是:
(苹果,猫)
(布莱克敦,格林纳克)
(X,Z)
答案 0 :(得分:8)
String
函数的split
参数是正则表达式,因此如果要使用管道,则必须对其进行转义:
line.split("\\|")
否则它被解释为两个空模式之间的交替。
您还可以使用variant which accepts Character
literal:
line.split('|')
或an Array
of Character
literals:
line.split(Array('|'))
验证输入也更好:
names.map(_.split("\\|")).collect {
case Array(x, _, y) => (x, y)
}