При обработке большого отдельного файла, он может быть разбит таким образом:Какие типы сжатия поддерживают блокирование в 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 Сыроватского как в закомментированного код:
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.
Существуют ли библиотеки сжатия, которые поддерживают этот поиск и разделение? Если да, то как их можно добавить?