Я посмотрел исходный код для NetworkX и обнаружил, что он просто вызывает return pickle.load(path)
при использовании read_gpickle(path)
в mode=rb
. Таким образом, проблема в том, что NetworkX хочет имя файла, но AWS lambda не может сделать это таким образом.
Не похоже, что метод NetworkX выполняет какую-либо дополнительную работу, чтобы превратить ответ в данные графика NetworkX. То есть, если NewtorkX просто использует pickle.load(path)
, то я предположил, что он будет работать с использованием pickle.loads(data_object)
напрямую. Я попробовал:
my_graph = pickle.loads(s3.Bucket("bucket_name").Object("key_to_pickle.gpickle").get()['Body'].read())
и это работает. Результатом является неразличимая форма загрузки JSON из S3 и загрузки gpickle локально, используя метод Network.
Вместо того, чтобы удалить мой вопрос, я решил опубликовать его здесь с ответом, чтобы будущие люди могли сэкономить время при загрузке сетевых данных в AWS.