我有一个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
答案 0 :(得分:1)
如果您想使用文本文件,请考虑每行/记录的固定长度/记录大小。
通过这种方式,您可以使用RandomAccessFile
至seek
按行编号分隔每行的确切位置:您只需查找line * LineSize
,然后进行更新。
如果你必须插入一个新行,那将无济于事。其他限制是:文件大小会增加(因为固定的记录长度),并且总会有一条记录太大。
至于初始转换:
|
之类的特殊字符来分隔字段。如果可能,请使用类似;
的内容,以便获得.csv文件\n
来终止记录。例如
http://x.com|http://x.com|http://x.com|...\n
或
http://x.com;http://x.com;http://x.com;...\n
其中每个.
代表一个空格字符。所以它仍然以某种方式与“普通”文本文件兼容。
另一方面,查看您的数据时,请考虑使用像Redis这样的键值数据存储:您可以使用行号或第一个URL作为键。