如何使用 s3 URL 格式将文件从自定义托管的 Minio s3 存储桶加载到 pandas?

How to load file from custom hosted Minio s3 bucket into pandas using s3 URL format?

我在本地托管了 Minio 服务器。 我需要使用 S3 URL 使用 pandas 从 minio s3 存储桶中读取文件,例如 Jupyter 笔记本中的“s3://dataset/wine-quality.csv”。

我尝试使用 s3 boto3 库能够下载文件。

import boto3
s3 = boto3.resource('s3',
                endpoint_url='localhost:9000',
                aws_access_key_id='id',
                aws_secret_access_key='password')
s3.Bucket('dataset').download_file('wine-quality.csv', '/tmp/wine-quality.csv')

但是当我尝试使用 pandas、

data = pd.read_csv("s3://dataset/wine-quality.csv")

我收到客户端错误,禁止访问 403。 我知道 pandas 在内部使用 boto3 库(如果错误请纠正我)

PS: Pandas read_csv 多了一个参数, " storage_options={ “钥匙”:AWS_ACCESS_KEY_ID, “秘密”:AWS_SECRET_ACCESS_KEY, “令牌”:AWS_SESSION_TOKEN, }"。但我找不到任何配置来传递自定义 Minio 主机 URL 供 pandas 读取。

Pandas v1.2 及更高版本允许您将存储选项传递给 fsspec,请参阅此处的文档:https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html?highlight=s3fs#reading-writing-remote-files.

要传入自定义url,需要通过client_kwargsstorage_options中指定:

df = pd.read_csv(
    "s3://dataset/wine-quality.csv",
    storage_options={
        "key": AWS_ACCESS_KEY_ID,
        "secret": AWS_SECRET_ACCESS_KEY,
        "token": AWS_SESSION_TOKEN,
        "client_kwargs": {"endpoint_url": "localhost:9000"}
    }
)