3

我正在尝试使用...从 s3 读取一个非常大的文件

import pandas as pd
import s3fs
df = pd.read_csv('s3://bucket-name/filename', chunksize=100000)

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

4

1 回答 1

4

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
于 2021-02-25T19:47:15.793 回答