给定一个带有行分隔 JSON 记录的文件:
{"id": 1, "position": 1234}
{"id": 2, "position": 23}
{"id": 3, "position": 43}
{"id": 1, "position": 223}
我想通过仅保留 id 的最后一条记录来压缩这样的文件,例如对于上面的示例,我希望将其作为输出:
{"id": 2, "position": 23}
{"id": 3, "position": 43}
{"id": 1, "position": 223}
tldr; 是否有uniq
适用于行分隔的 JSON(并且速度很快)?
输入文件可能包含 10 亿条记录,其中可能有 10-20% 的记录可以丢弃。
我尝试了各种方法:
看过的id
在内存中保留一组“已见”的 ID。这会耗尽内存。
排序和唯一
首先按“id”对文件进行排序(使用稳定的排序,因此保留顺序)。然后再次运行文件,只保留最后一条记录。这就像通常的 unix
sort | uniq
方法。排序在这里很昂贵,而且可能工作量太大。提取偏移量和长度信息
从文件中提取偏移量和长度信息以及 id,例如
id offset length 1 0 27 2 27 25 3 52 25 1 77 26
并找出哪些记录属于压缩集。然后查找并阅读该文件。此信息的提取速度相当快,但数百万次搜索和读取以提取记录会减慢这种方法的速度。
有什么更好、更快(或最快)的方法?是否有解决此类问题的现有工具?