如何将压缩的(gz)CSV 文件读入 dask Dataframe?

How to read a compressed (gz) CSV file into a dask Dataframe?

有没有办法将通过 gz 压缩的 .csv 文件读取到 dask 数据帧中?

我直接用

试过了
import dask.dataframe as dd
df = dd.read_csv("Data.gz" )

但出现 unicode 错误(可能是因为它正在解释压缩字节) 有一个 "compression" 参数,但 compression = "gz" 不起作用,到目前为止我找不到任何文档。

使用 pandas 我可以直接读取文件,除了结果会破坏我的记忆之外没有任何问题;-) 但是如果我限制行数它工作正常。

import pandas.Dataframe as pd
df = pd.read_csv("Data.gz", ncols=100)

没有文件就不好说了。如果你设置编码 like # -*- coding: latin-1 -*- 会怎么样?或者因为 read_csv 是基于 Pandas,你甚至可以 dd.read_csv('Data.gz', encoding='utf-8')。这是 Python 编码的列表:https://docs.python.org/3/library/codecs.html#standard-encodings

Panda 的当前文档说:

compression : {‘infer’, ‘gzip’, ‘bz2’, ‘zip’, ‘xz’, None}, default ‘infer’

因为 'infer' 是默认值,这可以解释为什么它与 pandas 一起工作。

Dask 关于 压缩 参数的文档:

String like ‘gzip’ or ‘xz’. Must support efficient random access. Filenames with extensions corresponding to known compression algorithms (gz, bz2) will be compressed accordingly automatically

这表明它还应该推断出至少 gz 的压缩。它没有(在 0.15.3 中仍然没有)可能是一个错误。但是,它正在使用 compression='gzip'.

即:

import dask.dataframe as dd
df = dd.read_csv("Data.gz", compression='gzip')

这实际上是dask. Load the files with dask.delayed instead长期存在的限制:

import pandas as pd
import dask.dataframe as dd
from dask.delayed import delayed

filenames = ...
dfs = [delayed(pd.read_csv)(fn) for fn in filenames]

df = dd.from_delayed(dfs) # df is a dask dataframe