Wenn eine große einzelne Datei verarbeiten, kann es als so aufgebrochen werden:Welche Komprimierungstypen unterstützen das Chunking in DASK?
import dask.bag as db
my_file = db.read_text('filename', blocksize=int(1e7))
Dies funktioniert gut, aber die Dateien arbeite ich mit ein hohes Maß an Redundanz und so halten wir sie komprimiert. Das Übergeben komprimierter gzip-Dateien führt zu einem Fehler, dass die Suche in gzip nicht unterstützt wird und daher nicht in Blöcken gelesen werden kann.
Die Dokumentation hier http://dask.pydata.org/en/latest/bytes.html#compression schlägt vor, dass einige Formate Random Access unterstützen.
Der entsprechende interne Code Ich denke, hier ist:
https://github.com/dask/dask/blob/master/dask/bytes/compression.py#L47
Es sieht aus wie lzma könnte es unterstützen, aber es hat sich als Kommentar gekennzeichnet.
Hinzufügen lzma in die seekable_files DIKT wie in der kommentierten out-Code:
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')
führt den folgenden Fehler:
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
Ich gehe davon aus, dass die Funktionen am Ende der Datei (get_xz_blocks
) zB kann dafür verwendet werden, scheint aber nirgendwo im desk-projekt verwendet zu werden.
Gibt es Komprimierungsbibliotheken, die dieses Suchen und Chunking unterstützen? Wenn ja, wie können sie hinzugefügt werden?