Apache spark 在SPARK中操作RDD,将线合并到逐行分隔符中

Apache spark 在SPARK中操作RDD,将线合并到逐行分隔符中,apache-spark,rdd,Apache Spark,Rdd,我有一个来自以下文件的RDD数据副本,我想基于行分隔符合并行,这样我就可以得到RDD[Person] case-class-Person(id:String,name:String,job:String) 请注意,数据文件很大,无法放入内存,因此无法执行类似操作 val lines = sc.textFile("/path/to/file") val person = lines.collect... 任何人都可以提供帮助?如果您的文本文件具有您解释的格式,您可以实现自定义数据源。参见示例如果

我有一个来自以下文件的RDD数据副本,我想基于行分隔符合并行,这样我就可以得到RDD[Person]

case-class-Person(id:String,name:String,job:String)

请注意,数据文件很大,无法放入内存,因此无法执行类似操作

val lines = sc.textFile("/path/to/file")
val person = lines.collect...

任何人都可以提供帮助?

如果您的文本文件具有您解释的格式,您可以实现自定义数据源。参见示例

如果文本文件具有您解释的格式,则可以实现自定义数据源。参见示例

我所做的:

val linesRdd = sc.textFile("/path/to/file")
val lineSeparator = "--------------"
var lastSeparatorIndex = 0

val personLinesRdd: RDD[String] = linesRdd
  .zipWithIndex
  .map{ case(line, index) =>
    if(line == lineSeparator) lastSeparatorIndex = index
    (line, lastSeparatorIndex)
  }

val personSlicesRdd: RDD[Seq[String] = personLinesRdd
  .groupBy{case (index, _) => index}
  .map{ case (_, lines) => lines.toSeq.map { case (line, _) => line }}
  .filter(_.nonEmpty)

val persons: RDD[Person] = personSlicesRdd.map(toPerson(_))
我所做的:

val linesRdd = sc.textFile("/path/to/file")
val lineSeparator = "--------------"
var lastSeparatorIndex = 0

val personLinesRdd: RDD[String] = linesRdd
  .zipWithIndex
  .map{ case(line, index) =>
    if(line == lineSeparator) lastSeparatorIndex = index
    (line, lastSeparatorIndex)
  }

val personSlicesRdd: RDD[Seq[String] = personLinesRdd
  .groupBy{case (index, _) => index}
  .map{ case (_, lines) => lines.toSeq.map { case (line, _) => line }}
  .filter(_.nonEmpty)

val persons: RDD[Person] = personSlicesRdd.map(toPerson(_))