Учитывая файл с разделителями строкой JSON записей:JSON файл журнал уплотнительной
{"id": 1, "position": 1234}
{"id": 2, "position": 23}
{"id": 3, "position": 43}
{"id": 1, "position": 223}
Я хотел бы компактного такого файла, сохраняя только последнюю запись для идентификатора, например, для приведенного выше примера, я хотел бы иметь в качестве выходного сигнала:
{"id": 2, "position": 23}
{"id": 3, "position": 43}
{"id": 1, "position": 223}
tldr; Есть ли uniq
, который работает с разделителем строк JSON (и быстро)?
Входные файлы могут содержать 1 миллиард записей, из которых может быть выброшено 10-20% записей.
Я пробовал различные подходы:
Seen Идентификаторы
Держите набор "видели" идентификаторов в памяти. Это заканчивается из памяти.
Сортировка и уникальный
Сортировка файлов по «ид» первый (со стабильной рода, так что сохраняется порядок). Затем снова запустите файл и просто сохраните последнюю запись. Это похоже на обычный подход unix
sort | uniq
. Сортировка здесь дорого и, возможно, слишком большая работа.Извлечение смещения и информация о длине
экстракт смещение и длина информации и идентификатор из файла, например,
id offset length 1 0 27 2 27 25 3 52 25 1 77 26
и выяснить, какие записи будут принадлежать к уплотненному множеству. Затем найдите и прочитайте файл. Извлечение этой информации достаточно быстро, но миллионы запросов и чтения для извлечения записей замедляют этот подход.
Что может быть лучше, быстрее (или быстрее)? Существуют ли существующие инструменты, которые решают эту проблему?
Любое предпочтение на каком языке должно происходить уплотнение? –
@BerndLinde, язык не имеет значения. Меня больше интересует общий подход или существующие инструменты. – miku