簡體   English   中英

將文件從 databricks dbfs / local 上傳到 S3 存儲桶。 如何使用 boto3 庫或掛載 s3 將文件從 databricks 上傳到 S3 存儲桶?

[英]Uploading a file from databricks dbfs / local to an S3 bucket. How do i upload a file from databricks to S3 bucket using boto3 library or mounting s3?

我嘗試了以下幾種方法在 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] No such file or directory: '/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'


請讓我知道是否有任何拼寫錯誤或語法錯誤,或者是否需要更改問題的結構。 謝謝!

下面的代碼對我來說很好

import boto3
from botocore.client import Config
ACCESS_KEY = 'YOUR_ACCESS_KEY'
SECRET_KEY = 'YOUR_SECRET_KEY'
AWS_BUCKET_NAME = "BUCKET_NAME"

s3 = boto3.resource('s3', aws_access_key_id = ACCESS_KEY, aws_secret_access_key 
=SECRET_KEY, config = Config(signature_version = 's3v4') )

s3.meta.client.upload_file( '/dbfs/FileStore/filename.csv', AWS_BUCKET_NAME, 
"filename.csv")

我找到了我的問題的答案 -

  1. 我沒有使用 put_object,而是使用了 upload_file()

  2. 其次,從 dbfs(databricks 文件系統)讀取時,始終在文件夾結構名稱前加上“/dbfs”

記住正斜杠 (/) 很重要


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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM