codezero
codezero

Reputation: 101

ERROR in getting file from Amazon S3 using python(3.8)

I am trying to get data from Amazon S3 and store it into a variable (file such as .pkl file).

And I am getting the following error:

ERROR:

expected str, bytes or os.PathLike object, not _io.BytesIO

CODE for S3

class S3Mgr:
    def __init__(self,bucketName):
        self.aws_access_key_id= CONFIG.S3[0]
        self.aws_secret_access_key = CONFIG.S3[1]
        self.region_name = CONFIG.S3[2]
        self.bucketName = bucketName

    def __connect(self):
        self.s3 = boto3.client(
            's3',
            aws_access_key_id=self.aws_access_key_id,
            aws_secret_access_key=self.aws_secret_access_key,
            region_name=self.region_name
            )
    def retrieveModel(self,fileName):
        self.__connect()
        a = self.s3.download_fileobj(Bucket=self.bucketName, Key="fcm/project/"+str(fileName))
        return a['Body'].read()

CODE for pickle

import pickle
from io import BytesIO

S3obj = S3mgr("mybucket")
model = S3obj.retrieveModel("model.pkl")

data = BytesIO(model)
model = pickle.load(data)

prediction = model.predict(inputArray)

Above inputArray is the array of inputs.

Upvotes: 1

Views: 374

Answers (1)

Strike
Strike

Reputation: 169

Try this, replace download_fileobj with get_object in your s3Mgr class's retrieveModel method.

Something like this:

def retrieveModel(self,fileName):
        self.__connect()
        a = self.s3.get_object(Bucket=self.bucketName, Key="fcm/project/"+str(fileName))
        return a['Body'].read()

I Hope, it works. Ping if any progress or need any help.

Cheers 👍 !

Upvotes: 1

Related Questions