将文件记录拆分为修订号记录

时间:2018-02-24 18:56:25

标签: scala apache-spark bigdata

我有一个有10,000行的大文件,我必须为这些记录调用一个API,但一次只能使用100行,所以需要一次传递100行到那个restapi,它需要只在scala上完成。

1 个答案:

答案 0 :(得分:1)

10k记录通常不被视为大数据(如果每条记录低于1兆字节)。

使用Spark是一项要求吗? Spark是一个用于大规模并行分布式计算的框架,根据您的描述,您似乎希望按顺序调用API。在Spark中,这很可能需要loading data into central (driver) node并从此处调用您的API。

我建议您考虑在本地处理您的数据。调用API不是CPU密集型操作,因此不需要引入不必要的复杂性。

像这样简单的东西也会起作用:

import scala.io.Source
import scala.util.Try

val s = Source.fromFile("/path/to/file")

try {
  s.getLines().grouped(100).map {
    ls: Seq[String] => apiCall(ls)  // ls is Seq of 100 lines
  }
} finally {
  Try(s.close())
}

如果您想并行而不是按顺序进行API调用,那么您可以使用Scala's built-in parallel collections,就像这样简单:

  s.getLines().grouped(100).toStream.par.map {
    ls: Seq[String] => apiCall(ls)
  }.seq