scala - Apache Spark RDD 拆分 "|"

标签 scala apache-spark

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

apple|ball|cat

Blacktown| Bela vista| Greenacre

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)

我需要的输出是:

(apple,cat)

(Blacktown, Greenacre)

(x,z)

最佳答案

split 函数的 String 参数是正则表达式,因此如果您想使用管道,则必须对其进行转义:

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

关于scala - Apache Spark RDD 拆分 "|",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39948177/

相关文章:

scala - Spark Streaming 包含文本

scala - Scala Spark 作业需要多长时间才能处理一个文件中的一百万行?

java - Spark 数据帧过滤 ("where") 子句的自定义解释

scala - 使用流打印列表中的元素

hadoop - 无法使用 oozie 运行示例 spark 作业

python - Pyspark RDD以不同的方式聚合不同的值字段

apache-spark - 如何检查 PySpark 使用了多少个内核?

Java/Spark - 按加权平均聚合分组

scala - 如何将 Scala 编译器选项附加到 sbt 中的 scalacOptions 中?

function - 传递隐式 - 这在 Scala 中可能吗?