4

我有一个包含 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 个字符串转换为浮点数以供添加。

我看过,gzip它们zcat是不错的选择。但我想找到一些压缩或序列化算法来存储数据Java/Python并在不解压缩的情况下执行读取。

4

3 回答 3

3

在 Java 中,您可以OutputStream使用GZIPOutputStreamGZIPInputStreamInputStream包装您的数据,以使用 GZIP 算法即时压缩/解压缩您的数据。

于 2013-02-07T20:11:38.590 回答
0

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

于 2013-02-07T21:13:08.547 回答
0

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

于 2013-02-07T19:49:23.310 回答