我正在尝试使用...从 s3 读取一个非常大的文件
import pandas as pd
import s3fs
df = pd.read_csv('s3://bucket-name/filename', chunksize=100000)
但即使在给出块大小之后,它也会永远占用。chunksize
从 s3 获取文件时该选项是否有效?如果没有,有没有更好的方法从 s3 加载大文件?
我正在尝试使用...从 s3 读取一个非常大的文件
import pandas as pd
import s3fs
df = pd.read_csv('s3://bucket-name/filename', chunksize=100000)
但即使在给出块大小之后,它也会永远占用。chunksize
从 s3 获取文件时该选项是否有效?如果没有,有没有更好的方法从 s3 加载大文件?
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html 清楚地说
filepath_or_bufferstr, path object or file-like object 任何有效的字符串路径都是可以接受的。该字符串可以是一个 URL。有效的 URL 方案包括 http、ftp、s3、gs 和文件。对于文件 URL,需要一个主机。本地文件可以是:file://localhost/path/to/table.csv。
如果你想传入一个路径对象,pandas 接受任何 os.PathLike。
通过类文件对象,我们指的是具有 read() 方法的对象,例如文件句柄(例如通过内置的 open 函数)或 StringIO。
读取块时,熊猫会返回您的迭代器对象,您需要遍历它。像这样的东西:
for df in pd.read_csv('s3://<<bucket-name>>/<<filename>>',chunksize = 100000):
process df chunk..
如果你认为是因为 chunksize 很大,你可以考虑只为第一个 chunk 尝试这样的小 chunksize:
for df in pd.read_csv('s3://<<bucket-name>>/<<filename>>',chunksize = 1000):
print(df.head())
break