将文本文件读入 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 中使用 map
或 map_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())
)
第一个选项可能字符较多,但感觉更简单,更符合你原来的代码。
无论您想接下来对文本进行什么(按行)处理,您仍然可以在相同的函数中进行。
我希望在约 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 中使用 map
或 map_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())
)
第一个选项可能字符较多,但感觉更简单,更符合你原来的代码。 无论您想接下来对文本进行什么(按行)处理,您仍然可以在相同的函数中进行。