将文件记录拆分为修复编号记录[关闭]

Posted

技术标签:

【中文标题】将文件记录拆分为修复编号记录[关闭]【英文标题】:Splitting a file records into fix number records [closed] 【发布时间】:2018-02-24 18:56:24 【问题描述】:

我有一个包含 10,000 行的大文件,我必须为这些记录调用 API,但一次只能使用 100 行,因此需要一次将 100 行传递给该 restapi,它需要只能在 scala 上完成。

【问题讨论】:

那么您希望我们提供什么帮助?你甚至没有显示任何代码。 欢迎来到 ***。你需要澄清这个问题,并展示你到目前为止所做的尝试。这个问题太笼统了。请read this before posting questions. 【参考方案1】:

10k 记录通常不被视为大数据(如果每条记录小于 1 MB)。

是否需要使用 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

【讨论】:

非常感谢 Aivean ..还有一个疑问,如果总行数不是 100 的倍数 ..假设我在文件中有 198 行,那么如何处理它 @A.Mishra,在这种情况下,grouped 返回的最后一批将少于 100 个元素。

以上是关于将文件记录拆分为修复编号记录[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何将记录拆分为不同的流,从一个主题到不同的流?

在压缩/修复期间防止自动编号重置 (MS Access)

拆分 Access 数据库并可能创建重复记录

将 SQL 查询返回的记录拆分为数组

oracle中如何将一条记录拆分为多条记录

如何使用 LINQ C# 将一个数据表拆分为两个(匹配记录)(不匹配记录)