通过应用块大小从 s3 加载文件

问题描述

,我正在尝试使用

从 s3 读取一个非常大的文件
import pandas as pd
import s3fs
df = pd.read_csv('s3://<<bucket-name>>/<<filename>>',chunksize = 100000)

但即使在给出块大小之后,它也会永远占用。从 s3 获取文件时,chunksize 选项是否有效?如果没有,从 s3 加载大文件有什么更好的方法吗?

解决方法

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html 明确表示

filepath_or_bufferstr,路径对象或类文件对象 任何有效 字符串路径是可以接受的。该字符串可以是一个 URL。有效网址 方案包括 http、ftp、s3、gs 和文件。对于文件 URL,主机是 预期的。本地文件可以是:file://localhost/path/to/table.csv。

如果你想传入一个路径对象,pandas 接受任何 os.PathLike。

通过类文件对象,我们指的是带有read()方法的对象,比如 文件句柄(例如,通过内置的 open 函数)或 StringIO。

在块中读取时,pandas 返回您的迭代器对象,您需要遍历它.. 类似的东西:

for df in pd.read_csv('s3://<<bucket-name>>/<<filename>>',chunksize = 100000):
    process df chunk..

如果你认为这是因为块大小很大,你可以考虑只为第一个块尝试像这样的小块:

for df in pd.read_csv('s3://<<bucket-name>>/<<filename>>',chunksize = 1000):
    print(df.head())
    break