【问题标题】:Reading text files into Dask DataFrame将文本文件读入 Dask DataFrame
【发布时间】:2020-12-18 19:52:17
【问题描述】:

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

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

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

但这会产生NotImplementedError 错误。

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

【问题讨论】:

    标签: python pandas dask dask-dataframe


    【解决方案1】:

    使用 mapmap_partitions 在 Dask 中您可以在 Pandas 中执行的操作

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

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

    【讨论】:

      【解决方案2】:

      在 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')
      

      【讨论】:

      • 谢谢,但我唯一的问题是使用 read_csv 确实可以正确读取文件。每个文本文件都是多行,我想保留在一个单元格中。设置sep=None 导致 ParserError
      猜你喜欢
      • 2017-02-16
      • 1970-01-01
      • 2019-06-26
      • 2022-01-13
      • 2021-05-05
      • 1970-01-01
      • 2017-11-11
      • 2017-05-08
      • 1970-01-01
      相关资源
      最近更新 更多