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

vee*_*til 9 python-3.x pandas jupyter-notebook minio

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

我尝试使用 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')
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用 pandas 时,

data = pd.read_csv("s3://dataset/wine-quality.csv")
Run Code Online (Sandbox Code Playgroud)

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

PS:Pandas read_csv 还有一个参数,“ storage_options={ "key": AWS_ACCESS_KEY_ID, "secret": AWS_SECRET_ACCESS_KEY, "token": AWS_SESSION_TOKEN, }"。但我找不到任何配置来传递自定义 Minio 主机 URL 供 pandas 读取。

Ash*_*dhu 10

Pandas v1.2 及以上版本允许您传递存储选项fsspec,这些选项会传递到 ,请参阅此处的文档:https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html ?highlight=s3fs#reading-写入远程文件

要传入自定义 url,您需要通过client_kwargsin指定它storage_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"}
    }
)
Run Code Online (Sandbox Code Playgroud)

  • 是的!可以使用“pip install s3fs”安装 (2认同)