Загрузка файла из базы данных dbfs / local в корзину S3. Как загрузить файл из блоков данных в корзину S3, используя библиотеку boto3 или монтируя s3? - PullRequest
0 голосов
/ 05 апреля 2020

Я попробовал следующее количество способов загрузить свой файл на S3, что в итоге приводит не к сохранению данных, а к пути к данным.

import boto3
s3 = boto3.resource('s3')

ИЛИ

s3 = boto3.client(
    's3',
    aws_access_key_id="key_id",
    aws_secret_access_key="access_key")

s3.Object('bucket/folder/','xyz.csv').upload_file(Filename='/mnt/folder/xyz.csv')

-> выдает ошибку FileNotFoundError: [Errno 2] Нет такого файла или каталога: '/mnt/folder/xyz.csv'


s3.put_object(Body='/databricks/driver/xyz.csv', Bucket='bucket', Key='folder/xyz.csv')

- > Успешно выполняет его, но при открытии файл не содержит ничего, кроме этой строки - '/databricks/driver/xyz.csv'


s3.Object('bucket', 'folder/xyz.csv').put(Body="/FileStore/folder/xyz.csv")

-> Успешно выполняет его, но при открытии файл ничего не содержит но эта строка - '/FileStore/folder/xyz.csv'


bucket = s3.Bucket('bucket')
s3.Object('bucket/folder', 'xyz.csv').put(Body=open('/FileStore/folder/xyz.csv', 'rb'))

-> выдает ошибку FileNotFoundError: [Errno 2] No such file or directory: '/mnt/folder/xyz.csv'


with open('/mnt/folder/xyz.csv', "rb") as f:
    s3.upload_fileobj(f, 'bucket', 'folder/xyz.csv')

- > Дает мне ошибку FileNotFoundError: [Errno 2] No such file or directory: '/mnt/folder/xyz.csv'


s3.meta.client.upload_file('/mnt/folder/xyz.csv', 'bucket', 'folder/xyz.csv')

-> Дает мне ошибку FileNotFoundError: [Errno 2] No such file or directory: '/mnt/folder/xyz.csv'


Пожалуйста, дайте мне знать, если есть опечатка или грамматические ошибки, или если нужно изменить структуру вопроса. Спасибо!

1 Ответ

0 голосов
/ 06 апреля 2020

Я нашел ответ на свой вопрос -

  1. Вместо использования put_object я использовал upload_file ()

  2. Во-вторых, при чтении из dbfs (файловой системы блоков данных) всегда ставьте перед именем структуры папки "/ dbfs"

Помните, вперед sla sh (/) важно


import boto3
s3_client = boto3.client('s3')
response = s3_client.upload_file('/dbfs/FileStore/folder/'xyz.csv', 'bucket', 'folder/'xyz.csv' )
...