我有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")
给我整个文件。但是,我需要逐帧访问。 任何人都可以帮我做到这一点
答案 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
}