【发布时间】:2013-07-18 09:04:30
【问题描述】:
我有一个大约 43GB 的 .ttl 大文本文件,其中包含以下形式的三元组:
<http://www.wikidata.org/entity/Q1001> <http://www.w3.org/2002/07/owl#sameAs> <http://la.dbpedia.org/resource/Mahatma_Gandhi> .
<http://www.wikidata.org/entity/Q1001> <http://www.w3.org/2002/07/owl#sameAs> <http://lad.dbpedia.org/resource/Mohandas_Gandhi> .
我想找到最快的方法来更新文件中的特定行而不重写所有下一个文本。通过更新或删除它并将其附加到文件末尾
要访问特定行,我使用以下代码:
val lines = io.Source.fromFile("text.txt").getLines
val seventhLine = lines drop(10000000) next
【问题讨论】:
-
它似乎使用了结构如此弱的“文本文件”(这显然是 不是 文本,它只是让你误以为它是),因为这种数据存储似乎就像一个明显的错误。还要记住,将这些数据视为文本并编写代码来操作“行”或
Strings 将意味着您将在系统中移动至少 172 GB 的数据,因为每个 JVMchar/ ScalaChar是两个字节,因此读取的每个字节都必须在读取时复制到 char 数组,在写入时复制回一个字节。 -
你应该考虑 SQLite。通过一些仔细的调整,您可以避免重新发明轮子。
标签: scala large-data bigdata