Apache Spark RDD Split" |"

时间:2016-10-09 20:23:55

标签: 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)

输出:

  

(X,Y)

     

(α,β)

     

(B,A)

我要求的输出是:

  

(苹果,猫)

     

(布莱克敦,格林纳克)

     

(X,Z)

1 个答案:

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