Следующий код восстанавливает локальную копию файла в памяти перед подачей в joblib.load()
, обеспечивая успешную загрузку.
from io import BytesIO
import boto3
from sklearn.externals import joblib
s3 = boto3.resource('s3')
bucket_str = "my-aws-bucket"
bucket_key = "some-pseudo/folder-set/my-filename.joblib"
with BytesIO() as data:
s3.Bucket(bucket_str).download_fileobj(bucket_key, data)
data.seek(0) # move back to the beginning after writing
df = joblib.load(data)
Я предполагаю, но не уверен, что что-то в том, как boto3 порции Файлы для загрузки создают нулевой байт, который разрушает joblib, и BytesIO исправляет это перед тем, как joblib.load()
видит поток данных.
PS. В этом методе файл никогда не касается локального диска, что полезно при некоторых обстоятельствах (например, узел с большой оперативной памятью, но небольшим дисковым пространством ...)