将文本文件读入 Dask DataFrame

Reading text files into Dask DataFrame

我希望在约 100,000 个文本文件上训练模型。 Pandas 运行 遇到了一些内存问题,因此决定迁移到 Dask。

我正在尝试将文件读入已存储文件路径的 dask DataFrame 中。在 pandas 中,我可以简单地执行以下操作:

ddf['rawtext'] = [open(file, 'rt').read() for file in ddf['filepath']]

但这会产生 NotImplementedError 错误。

有没有办法高效地将文本文件读入 Dask?

在pandas中你只需要提供单个文件的路径,它会为你处理I/O操作,不需要打开每个文件并将其传递到列表中。

dask,像许多其他大型框架一样,可以接受一个对象目录并一次性读取它们。

来自 docs.

!ls data/*.csv | head

data/2000-01-01.csv
data/2000-01-02.csv
data/2000-01-03.csv
data/2000-01-04.csv
data/2000-01-05.csv
data/2000-01-06.csv
data/2000-01-07.csv
data/2000-01-08.csv
data/2000-01-09.csv
data/2000-01-10.csv

dd.read_csv('data/2000-*-*.csv')

在你的情况下,我认为它是

dd.read_csv('data/*.txt')

您可以在 Pandas 中使用 mapmap_partitions

在 Dask 中执行的操作
def read_them(df):
    df['rawtext'] = [open(file, 'rt').read() for file in ddf['filepath']]
    return df

ddf2 = ddf.map_partitions(read_them)

ddf2 = ddf.assign(
    raw_text=ddf.filepath.map(lambda x: open(x, 'rt').read())
)

第一个选项可能字符较多,但感觉更简单,更符合你原来的代码。 无论您想接下来对文本进行什么(按行)处理,您仍然可以在相同的函数中进行。