2016-10-09 282 views
6

我正尝试使用Apache Spark从管道(“|”)分隔文件生成格式化的CSV文件。输入文件包含:Apache Spark RDD拆分“|”

苹果|球|猫

布莱克顿|贝拉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)

(A,P)

(B,A)

我所需的输出是:

(苹果,猫)

(黑镇,格里纳克)

(X,Z)

回答

7

A String参数split函数是一个正则表达式,所以如果你想使用管道它必须是esca ped:

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) 
}