dask 分块读取 gzip 文件
项目描述
Dask 索引化 gzip
##################
|pypi-version| |travis| |coveralls|
兼容 `dask read_text`_ 接口的实现,
可以将 gzip 文本文件分块成几个分区,
多亏了由 `indexed_gzip`_ 提供的索引。
当您的数据驻留在大 gzip 文件中时,这非常有用,
但您又想利用 dask 并行能力的优势。
示例会话
---------------
::
>>> import os
>>> import dask_igzip
初始化
>>> data_path = os.path.join(os.path.dirname(dask_igzip.__file__), "..", "test", "data")
::
>>> source = os.path.join(data_path, "sample.txt.gz")
>>> # 每块 3 行(显然这是用于演示的)
>>> 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'
为什么?
-----
Dask `read_text` 在您提供 gzip 文件时创建一个唯一的分区。
这个限制来自于这样一个事实:
没有一种方法可以以可预测且一致的方式分割 gzip 文件。
本项目提供了一个gzip已索引的实现,
然后行位置也会被索引,
这样可以通过块读取文本(从而实现并行化)。
首次运行时,索引会被保存到磁盘上,以便后续运行更快。
.. _`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: 最新PyPI版本
.. |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
变更日志
#########
格式基于 `Keep a Changelog`_
本项目尝试遵循 `语义化版本控制`_。
.. _`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
==================
新增
---
- read_text 现在可以接受一个限制参数来限制读取的行数总和
变更
-------
- 行索引的不兼容格式
0.1.0 - 2018-06-19
==================
新增
---
- 初始发布
- 100% 代码覆盖率
##################
|pypi-version| |travis| |coveralls|
兼容 `dask read_text`_ 接口的实现,
可以将 gzip 文本文件分块成几个分区,
多亏了由 `indexed_gzip`_ 提供的索引。
当您的数据驻留在大 gzip 文件中时,这非常有用,
但您又想利用 dask 并行能力的优势。
示例会话
---------------
::
>>> import os
>>> import dask_igzip
初始化
>>> data_path = os.path.join(os.path.dirname(dask_igzip.__file__), "..", "test", "data")
::
>>> source = os.path.join(data_path, "sample.txt.gz")
>>> # 每块 3 行(显然这是用于演示的)
>>> 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'
为什么?
-----
Dask `read_text` 在您提供 gzip 文件时创建一个唯一的分区。
这个限制来自于这样一个事实:
没有一种方法可以以可预测且一致的方式分割 gzip 文件。
本项目提供了一个gzip已索引的实现,
然后行位置也会被索引,
这样可以通过块读取文本(从而实现并行化)。
首次运行时,索引会被保存到磁盘上,以便后续运行更快。
.. _`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: 最新PyPI版本
.. |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
变更日志
#########
格式基于 `Keep a Changelog`_
本项目尝试遵循 `语义化版本控制`_。
.. _`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
==================
新增
---
- read_text 现在可以接受一个限制参数来限制读取的行数总和
变更
-------
- 行索引的不兼容格式
0.1.0 - 2018-06-19
==================
新增
---
- 初始发布
- 100% 代码覆盖率
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码分发
构建分发
dask_igzip-0.2.0-py3-none-any.whl (7.7 kB 查看哈希值)