1

何百万もの行が繰り返されたり、順番に複製されたりする csv ファイルを圧縮する最適な方法があるかどうかを知りたかったのです。各行には 4 ~ 5 個の要素があります。一意の行は数百しかありませんが、各行が何度も出現するため、ファイル全体のサイズが大きくなります。

gzip や bzip2 などのツールで使われている細かいアルゴリズムについては詳しくありませんが、gzip や bzip2 にこのパターンを指示する方法はないかと考えていました。たとえば、a、b、c、d、e の行が 100 万行ある場合、これは内部的に abcde のエントリとして最適に表すことができ、回数が繰り返される場合はその数のカウントになります (たとえば、abcde が 2 M 回繰り返される場合)。 )。これは、圧縮アルゴリズムが abcdeabcdabcde... を圧縮しようとするため、言うよりも最適です。データがソートされた表形式であり、重複した行/タプルが含まれている場合など、ケースを最適化するための汎用的な方法を探しています。

前もって感謝します。

4

1 に答える 1

2

独自のカスタム形式を作成する必要があります。何かのようなもの:

0 -> ファイルの終わり 1 -> 行が続きます (行末で自己終了します) 2..n -> 前の行をその回数繰り返します

数値は可変長の整数にすることができます。バイトの上位ビットが 0 の場合は整数の終わりを示し、1 の場合はさらにバイトがあることを示します。次に、各バイトの下位 7 ビットが連結されて整数になります。そのため、繰り返し回数が少ない (< 128) 場合は 1 バイトしかかかりません。長いものはより多くのバイトを必要とします。両端で一貫している限り、重要でないものを最初に、または重要なものを最初に連結できます。

この方法で繰り返し行を削除したら、gzip で圧縮します。

于 2013-07-15T04:44:09.620 に答える