Python 的快速键值磁盘存储

Hen*_*son 7 python arrays on-disk key-value sparse-matrix

我想知道是否有一个带有 Python 绑定的快速磁盘键值存储,它支持对单独键的数百万次读/写调用。我的问题涉及计算一个非常大的语料库(维基百科)中的单词共现,并不断更新共现计数。这涉及使用 64 位密钥和 64 位值读取和写入约 3 亿个值 70 次。

我还可以将我的数据表示为尺寸约为 2M x 2M 的上三角稀疏矩阵。

到目前为止我已经尝试过:

  • Redis(64GB内存不够大)
  • TileDB SparseArray(无法添加值)
  • Sqlite(太慢了)
  • LMDB(批处理事务中的 3 亿个读/写需要几个小时才能执行)
  • Zarr(基于坐标的更新非常慢)
  • Scipy .npz(无法将矩阵保留在内存中用于加法部分)
  • 具有内存映射坐标和数据的稀疏 COO(添加矩阵时 RAM 使用量很大)

目前唯一运行良好的解决方案是 LMDB,但运行时间约为 12 天,这似乎不合理,因为我感觉自己没有处理那么多数据。使用 .npz 将子矩阵(大约 300M 值)保存到磁盘几乎是即时的。

有任何想法吗?

Maj*_*ani -1

PySpark 在这里更有用。

PairFunction<String, String, String> keyData =
  new PairFunction<String, String, String>() {
  public Tuple2<String, String> call(String x) {
    return new Tuple2(x.split(" ")[0], x);
  }
};
Run Code Online (Sandbox Code Playgroud)

JavaPairRDD<String, String>pairs =lines.mapToPair(keyData); https://www.oreilly.com/library/view/learning-spark/9781449359034/ch04.html