'Working with Minio and Dask I get s3.ServiceResource' 对象没有属性 'create_client'

'Working with Minio and Dask I get s3.ServiceResource' object has no attribute 'create_client'

正在尝试使用 boto3 从 minio 读取并输入到 Dask

我得到:

's3.ServiceResource' object has no attribute 'create_client'

我设置了 boto:

import botocore, os
from botocore.client import Config
from botocore.session import Session

s3 = boto3.resource('s3',
  endpoint_url='https://example.org',
  aws_access_key_id=key,
  aws_secret_access_key=secret,
  config=Config(signature_version='s3v4'),
  region_name='us-east-1')

os.environ['S3_USE_SIGV4'] = 'True'

在这一点上,事情似乎很好,一个简单的测试:

for bucket in s3.buckets.all():
     print(bucket.name)

将无错误地连接并且 return 我期望的遗愿清单。

但是,使用

迁移到 Dask
from minio import Minio
from minio.error import ResponseError
import io, sys, dask, s3fs
import pandas as pd
import dask.bag as db
import json

df = db.read_text('s3://mybucket/prefa/prefb/*.jsonld', storage_options={"session": s3}).map(json.loads)

结果

...
's3.ServiceResource' object has no attribute 'create_client'

我在这里真的很困惑,正在寻找指导。
谢谢..

“会话”应该是 botocore 会话对象,而不是 boto3 资源。您最好在 client_kwargs 参数中传递各种参数。

df = db.read_text(
    's3://mybucket/prefa/prefb/*.jsonld', 
    storage_options={"client_kwargs": 
        dict(endpoint_url='https://example.org', ...)}
    ).map(json.loads)

(请参阅 s3fs 的文档,了解您可以使用 storage_options 传递的完整参数集)