2013-07-15 2 views
1

Я хотел знать, существует ли какой-то оптимальный способ сжатия файла csv, который содержит миллионы строк, которые повторяются/дублируются последовательно. Каждая строка имеет 4-5 элементов. Есть только несколько сотен уникальных строк, но поскольку каждый из них появляется столько раз, общий размер файла большой.Оптимальное сжатие csv-файлов с повторяющимися строками

Я не знаком с подробными альгосами, используемыми в таких инструментах, как gzip, bzip2 и т. Д., Но я думал о том, есть ли способ проинструктировать gzip или bzip2 этого шаблона. Например, если у меня было 1 миллион строк a, b, c, d, e, тогда внутренне это можно было бы оптимально представить в качестве записи для abcde и подсчета числа, если повторение повторяется (например, abcde повторяется 2 М раз). Это было бы более оптимальным, чем, скажем, для алгоритма сжатия попытаться сжать abcdeabcdeabcde .... Я ищу общий способ оптимизации случаев suh, поскольку они находятся в отсортированном табличном формате и содержат дублированные строки/кортежи.

Заранее спасибо.

ответ

2

Вы должны создать свой собственный формат. Что-то вроде:

0 -> конца файла 1 -> строки следующим образа (самоограниченная с концом строки-) 2..n -> повторить предыдущую строку, много раз

число может быть целым числом переменной длины, где старший бит байта равен нулю, указывает конец целого числа, один из которых указывает на то, что больше байтов. Затем младшие семь бит каждого байта объединяются, чтобы сделать целое число. Таким образом, небольшое количество повторений (< 128) принимает только один байт. Более длинные берут больше байтов. Вы можете связать их либо наименее значимыми, либо первыми, либо наиболее значимыми, если вы согласны на обоих концах.

Как только вы удалили повторяющиеся строки таким образом, затем сжимайте gzip.

Смежные вопросы