哪些压缩类型支持dask中的分块?

哪些压缩类型支持dask中的分块?,dask,Dask,处理单个大文件时,可以将其拆分为: import dask.bag as db my_file = db.read_text('filename', blocksize=int(1e7)) 这很好,但是我处理的文件有很高的冗余度,所以我们对它们进行压缩。传入压缩的gzip文件会导致一个错误,即不支持在gzip中查找,因此无法在块中读取 这里的文档表明,某些格式支持随机访问 我认为相关的内部代码如下: 看起来lzma可能会支持它,但它已经被注释掉了 将lzma添加到可查找的_文件dict中,

处理单个大文件时,可以将其拆分为:

import dask.bag as db

my_file = db.read_text('filename', blocksize=int(1e7))
这很好,但是我处理的文件有很高的冗余度,所以我们对它们进行压缩。传入压缩的gzip文件会导致一个错误,即不支持在gzip中查找,因此无法在块中读取

这里的文档表明,某些格式支持随机访问

我认为相关的内部代码如下:

看起来lzma可能会支持它,但它已经被注释掉了

将lzma添加到可查找的_文件dict中,如注释掉的代码中所示:

from dask.bytes.compression import seekable_files
import lzmaffi
seekable_files['xz'] = lzmaffi.LZMAFile
data = db.read_text('myfile.jsonl.lzma', blocksize=int(1e7), compression='xz')
引发以下错误:

Traceback (most recent call last):
  File "example.py", line 8, in <module>
    data = bag.read_text('myfile.jsonl.lzma', blocksize=int(1e7), compression='xz')
  File "condadir/lib/python3.5/site-packages/dask/bag/text.py", line 80, in read_text
    **(storage_options or {}))
  File "condadir/lib/python3.5/site-packages/dask/bytes/core.py", line 162, in read_bytes
    size = fs.logical_size(path, compression)
  File "condadir/lib/python3.5/site-packages/dask/bytes/core.py", line 500, in logical_size
    g.seek(0, 2)
io.UnsupportedOperation: seek
回溯(最近一次呼叫最后一次):
文件“example.py”,第8行,在
data=bag.read_text('myfile.jsonl.lzma',blocksize=int(1e7),compression='xz')
文件“condadir/lib/python3.5/site packages/dask/bag/text.py”,第80行,只读文本
**(存储选项或{}))
文件“condadir/lib/python3.5/site packages/dask/bytes/core.py”,第162行,以读取字节为单位
大小=fs.逻辑大小(路径、压缩)
文件“condadir/lib/python3.5/site packages/dask/bytes/core.py”,第500行,逻辑大小
g、 寻找(0,2)
io.UnsupportedOperation:查找
例如,我假设文件底部的函数(
get_xz_blocks
)可以用于此目的,但在dask项目中似乎没有在任何地方使用


是否有支持这种搜索和分块的压缩库?如果是,如何添加它们?

是的,您认为xz格式对您很有用,这是对的。混淆之处在于,文件可能是块格式的,但标准实现
lzmaffi.LZMAFile
(或lzma)没有使用这种块。请注意,块格式仅对zx文件是可选的,例如,通过与xz UTIL一起使用
--block size=size

函数
compression.get_xz_blocks
将通过只读取文件头而不是整个文件来提供文件中的块集,您可以将此功能与延迟功能结合使用,基本上重复
read_text
中的一些逻辑。我们没有投入时间来实现这一无缝连接;同样的模式也可用于写入被阻止的xz文件