當處理一個大單的文件,它可以分解爲這樣:哪些壓縮類型支持在dask中分塊?
import dask.bag as db
my_file = db.read_text('filename', blocksize=int(1e7))
這個偉大的工程,但我一起工作的文件有冗餘的較高水平,所以我們讓他們壓縮。傳遞壓縮的gzip文件會導致不支持在gzip中搜索的錯誤,因此無法以塊的形式讀取。
這裏的文檔http://dask.pydata.org/en/latest/bytes.html#compression表明某些格式支持隨機訪問。
相關的內部代碼,我認爲是在這裏:
https://github.com/dask/dask/blob/master/dask/bytes/compression.py#L47
它看起來像LZMA可能會支持它,但它被註釋掉。
添加LZMA到seekable_files 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
我假定在文件的底部的功能(get_xz_blocks
)例如可以用於這個,但似乎沒有在dask項目的任何地方使用。
是否有壓縮庫確實支持這種查找和分塊?如果是這樣,他們怎麼能被添加?