从Scala中的txt文件访问部分数据

时间:2015-12-05 04:40:26

标签: scala apache-spark rdd

我有data.txt文件

此文件的第一行如下

ATOM 00000000 -0.548 15.9994

其中第二个字段是"帧号" (即,00000000) data.txt文件的后续行包含第1,2帧的原子数据,... 100(即00000001,00000002 ......)。

每帧中约有20k个原子。我需要从data.txt加载数据 FRAME BY FRAME"(一次一帧)

我知道,

   val rawRDD = sc.textFile("data.txt") 

给我整个文件。但是,我需要逐帧访问。 任何人都可以帮我做到这一点

1 个答案:

答案 0 :(得分:1)

我不知道您使用的是什么版本的Spark,但如果可能的话,我建议您尝试使用DataFrames。 与此同时,希望我能解决您的问题,这是RDD的可能解决方案:

case class AtomData(category: String, frame: Int, x: Float, y: Float)
val rawRDD = sc.textFile("data.txt").map(line => {
    val fields = line.split("\\s")

    AtomData(fields(0), fields(1).toInt, fields(2).toFloat, fields(3).toFloat)
})

/**
 * If you already know the frames...
 */
val lastFrame = 100
for (i <- 0 to lastFrame) {
    val tmpRDD = rawRDD.filter(_.frame == i)
    // Do some stuff here...
}

/**
  * If you don't know the number of frames...
  */

val distinctFrames = rawRDD.map(_.frame).distinct.collect()
for (frame <- distinctFrames) {
    val tmpRDD = rawRDD.filter(_.frame == frame)
    // Do some stuff here
}