-2

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

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

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

但这给出了一个NotImplementedError错误。

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

4

2 回答 2

1

你可以在 Pandas 中做什么,你可以在 Dask 中使用mapmap_partitions

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())
)

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

于 2020-12-18T21:45:27.273 回答
0

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

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

文档

!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')
于 2020-12-18T21:08:55.377 回答