问题描述
,我正在尝试使用
从 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