Metadata-Version: 2.0
Name: dask-igzip
Version: 0.2.0
Summary: dask chunked read_text on gzip file
Home-page: https://github.com/jurismarches/dask-igzip
Author: Jurismarches
Author-email: contact@jurismarches.com
License: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)
Classifier: Topic :: Scientific/Engineering :: Information Analysis
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Provides-Extra: tests
Requires-Dist: dask[bag] (>=0.17.5)
Requires-Dist: indexed-gzip (>=0.8.5)
Provides-Extra: tests
Requires-Dist: distributed (>=1.22); extra == 'tests'
Requires-Dist: flake8 (>=3.5.0); extra == 'tests'
Requires-Dist: pytest-cov (>=2.5.1); extra == 'tests'
Requires-Dist: pytest (>=3.4.2); extra == 'tests'

Dask indexed gzip
##################

|pypi-version| |travis| |coveralls|

An implementation compatible with `dask read_text`_ interface,
than can chunk a gzipped text file into several partitions,
thanks to an index, provided by `indexed_gzip`_

This is useful when your data resides in a big gzipped file,
yet you want to leverage dask parallelism capabilities.

Sample session
---------------

::

  >>> import os
  >>> import dask_igzip

.. initalization

  >>> data_path = os.path.join(os.path.dirname(dask_igzip.__file__), "..", "test", "data")

::

  >>> source = os.path.join(data_path, "sample.txt.gz")
  >>> # 3 lines per chunk (obviously this is for demoing)
  >>> bag = dask_igzip.read_text(source, chunk_size=3, encoding="utf-8")
  >>> lines = bag.take(4, npartitions=2)
  >>> print("".join(lines).strip())
  a first sentence
  a second sentence
  a third sentence
  a fourth sentence
  >>> bag.str.upper().str.strip().compute()[8]
  'LINE 9'

Why ?
-----

Dask `read_text` creates a unique partition if you provide it with a gzip file.
This limitations comes from the fact that
there is no way to split the gzip file in a predictable yet coherent way.

This project provides an implementation where the gzip is indexed,
then lines positions are also indexed,
so that reading the text can be done by chunk (thus enabling parallelism).
On first run, indexes are saved on disk, so that subsequent runs are fast.

.. _`indexed_gzip`: https://githuib.com/pauldmccarthy/indexed_gzip
.. _`dask read_text`: https://dask.pydata.org/en/latest/bag-creation.html#db-read-text


.. |pypi-version| image:: https://img.shields.io/pypi/v/dask-igzip.svg
    :target: https://pypi.python.org/pypi/dask-igzip
    :alt: Latest PyPI version
.. |travis| image:: http://img.shields.io/travis/jurismarches/dask_igzip/master.svg?style=flat
    :target: https://travis-ci.org/jurismarches/dask_igzip
.. |coveralls| image:: http://img.shields.io/coveralls/jurismarches/dask_igzip/master.svg?style=flat
    :target: https://coveralls.io/r/jurismarches/dask_igzip




Changelog
#########

The format is based on `Keep a Changelog`_
and this project tries to adhere to `Semantic Versioning`_.

.. _`Keep a Changelog`: http://keepachangelog.com/en/1.0.0/
.. _`Semantic Versioning`: http://semver.org/spec/v2.0.0.html


0.2.0 - 2018-06-20
==================

New
---

- read_text now accept a limit parameter to limit the global amount of lines to read

Changed
-------

- incompatible format for lines index

0.1.0 - 2018-06-19
==================

New
---

- initial release
- 100% code coverage


