4

25,000のfloat(,区切られた)を含むファイルがあり、そのような行は約100Kあります。ファイルの行は次のようになります。

1689.97,-9643.39,-82082.1,9776.09,-33974.84,-67247.38,32997.34,72811.53,31642.87,-949.6,9340.68,-85854.48,-17705.36,187.74,-3002.6,-35812.21,37382.32,22770.78,40893.09,45743.99,-6500.92,26243.85,13975.95,0,56669.47,-25865.36,-17066.78,26788.57,0,-36554.86,-3687.19,18933.93

2つの部分からなる質問があります。

  1. パフォーマンスにあまり影響を与えずにデータを効率的に圧縮する方法(JavaまたはPython)はありますか?圧縮は1日に1回行われますが、データはかなり頻繁に読み取る必要があります。
  2. データを圧縮形式で操作できますか?たとえば、解凍せずに最初の10行の最初の10列を集約したいと思います。そうすれば、圧縮データを頻繁に読み取ることを心配する必要がありません。課題の1つは、25,000文字列を追加のためにfloatに変換することです。

私は見てきましたgzipzcatそしてそれらは良い選択肢です。Java/Pythonしかし、データを保存し、解凍せずに読み取りを実行するための圧縮またはシリアル化アルゴリズムを見つけたかったのです。

4

3 に答える 3

3

Javaでは、GZIPOutputStreamでラップOutputStreamGZIPInputStreamでラップて、GZIPアルゴリズムを使用してデータをオンザフライで圧縮/解凍できます。InputStream

于 2013-02-07T20:11:38.590 に答える
0

useDataOutPutStreamとwriteFloatを使用すると、カンマ区切り文字を使用する必要はありません

于 2013-02-07T19:49:23.310 に答える
0

テキストとして書き出す代わりに、バイトとして書き出すことができます。述語からバイト配列へ/から変換する必要がありますが、それはそれほど難しいことではないと思います。Float.floatToRawIntBits()を使用してintに変換し、Float.intBytesToFloat()を使用してintから戻ることができることを知っています。intをbyte[]に変換するのは、ほんの数ビットシフトの問題です。

于 2013-02-07T21:13:08.547 に答える