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