2016-10-09 279 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) 
}