如何在 S3 上存储大型压缩 CSV 以便与 Dask 一起使用
How to store large compressed CSV on S3 for use with Dask
我有一个大型数据集(约 1 TB 的数据)分布在多个 csv 文件中,我想在 S3 上存储(压缩)这些文件。我在将压缩文件读入 dask 时遇到问题,因为它们太大了,所以我最初的解决方案是将每个 csv 拆分为可管理的大小。然后按以下方式读取这些文件:
ddf = dd.read_csv('s3://bucket-name/*.xz', encoding = "ISO-8859-1",
compression='xz', blocksize=None, parse_dates=[6])
在我摄取完整数据集之前 - 这是正确的方法,还是有更好的方法来完成我的需要?
这对我来说似乎很明智。
这里出现的唯一挑战是压缩。如果压缩格式不支持随机访问,则 Dask 无法将大文件分解为多个较小的部分。这也适用于支持随机访问的格式,例如 xz,但未针对该特定文件进行配置。
将文件手动拆分成许多小文件并使用 blocksize=None
就像您在上面所做的那样,在这种情况下是一个很好的解决方案。
我有一个大型数据集(约 1 TB 的数据)分布在多个 csv 文件中,我想在 S3 上存储(压缩)这些文件。我在将压缩文件读入 dask 时遇到问题,因为它们太大了,所以我最初的解决方案是将每个 csv 拆分为可管理的大小。然后按以下方式读取这些文件:
ddf = dd.read_csv('s3://bucket-name/*.xz', encoding = "ISO-8859-1",
compression='xz', blocksize=None, parse_dates=[6])
在我摄取完整数据集之前 - 这是正确的方法,还是有更好的方法来完成我的需要?
这对我来说似乎很明智。
这里出现的唯一挑战是压缩。如果压缩格式不支持随机访问,则 Dask 无法将大文件分解为多个较小的部分。这也适用于支持随机访问的格式,例如 xz,但未针对该特定文件进行配置。
将文件手动拆分成许多小文件并使用 blocksize=None
就像您在上面所做的那样,在这种情况下是一个很好的解决方案。