压缩/序列化/操作大量数据的有效方法

时间:2013-02-07 19:40:01

标签: java python performance

我有一个包含25,000个浮点数(,分隔符)的文件,大约有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

我有两个问题。

  1. 是否有办法(在Java或Python中)有效地压缩数据而不会影响性能。压缩每天进行一次,但必须经常读取数据。
  2. 可以以压缩形式操纵数据,例如我想在前10行中聚合前10列而不解压缩。这样我就不必担心频繁读取压缩数据了。其中一个挑战是将25,000个字符串转换为float以进行添加。
  3. 我查看了gzipzcat,这是很好的选择。但我想找到一些压缩或序列化算法来通过Java/Python存储数据并执行读取而不解压缩。

3 个答案:

答案 0 :(得分:3)

在Java中,您可以使用GZIPOutputStreamOutputStreamGZIPInputStream InputStream包裹在一起,使用GZIP算法即时压缩/解压缩您的数据。

答案 1 :(得分:0)

使用DataOutPutStream和writeFloat,您不需要使用逗号分隔符

答案 2 :(得分:0)

您可以将其写为字节,而不是将其写为文本。你必须转换为/从premitives转换为字节数组,但我认为这不会太难。我知道您可以使用Float.floatToRawIntBits()转换为int,并使用Float.intBytesToFloat()从int返回。将int转换为byte []只需要几个位移。