Apache Spark RDD拆分"|"

Ran*_*ana 7 scala apache-spark

我正在尝试使用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)
Run Code Online (Sandbox Code Playgroud)

输出:

(X,Y)

(A,P)

(B,A)

我要求的输出是:

(苹果,猫)

(布莱克敦,格林纳克)

(X,Z)

use*_*411 9

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

line.split("\\|")
Run Code Online (Sandbox Code Playgroud)

否则它被解释为两个空模式之间的交替.

您还可以使用接受Character文字的变体:

line.split('|')
Run Code Online (Sandbox Code Playgroud)

一个ArrayCharacter文字:

line.split(Array('|'))
Run Code Online (Sandbox Code Playgroud)

验证输入也更好:

names.map(_.split("\\|")).collect {
  case Array(x, _, y) => (x, y)
}
Run Code Online (Sandbox Code Playgroud)