【问题标题】:Is there a way to make dask read_csv ignore empty files?有没有办法让 dask read_csv 忽略空文件?
【发布时间】:2020-11-10 07:38:46
【问题描述】:

我有一个 dasaset,每天有 200k 个文件,这些文件相当小.txt.gz,其中 99% 小于 60kbytes。由于 gzip 压缩,其中一些文件是大小为 20 的空文件。

当我尝试使用 dask 加载整个目录时,我得到一个 pandas.errors.EmptyDataError。由于我计划每天直接从 S3 加载此文件,我想知道是否可以通过 dd.read_csv() 忽略或跳过这些文件。我在 dask 的 read_csv() 和 pandas 的 read_csv() 的文档中没有找到任何控制错误处理的选项。

当然,我可以将所有文件从 s3 复制到本地硬盘,然后在 Dask 中加载之前扫描并删除所有有问题的文件,但这会更慢(复制所有 200k文件)。

原则上,我只想将所有这 200k CSV 文件加载到 Dask 中,以将它们转换为更少的 parquet 文件。所以我什至不确定 Dask 是否是最好的工具,但如果有一种简单的方法可以让它工作,我会

【问题讨论】:

  • 为什么需要 pandas/dask 来完成 OS 工具的功能?
  • 我认为这已经在 OP 中,我不想将 200k 文件从 S3 复制到本地磁盘,因为这样做(并行)并非易事。正如我所说,它也会变慢,但如果可以直接使用 Dask,我也不喜欢另一个工具复制文件和脚本以消除这种特殊类型的错误,从而增加复杂性。

标签: python pandas amazon-s3 dask


【解决方案1】:

一种可能的方法是通过异常:

import pandas.io.common

for i in range(0,len(file_paths)):
   try:
      pd.read_csv(file_paths[i])
   except pandas.io.common.EmptyDataError:
      print file_paths[i], " is empty"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    • 2021-01-06
    • 1970-01-01
    • 2022-06-22
    相关资源
    最近更新 更多