我的 Python 代码中有一个 Dataframe,它在 databricks 笔记本中运行,其中填充了我从 Spotify API 获得的数据。我将从api获得的数据存储到数据框中。
现在我想将此数据带到 AWS S3。我尝试了 dbutils.fs.put
和 boto3 s3.Bucket(BUCKET_NAME).put_object
,但由于现在只能从我的 S3 存储桶中读取数据,因此当我尝试向其写入内容时,总是会遇到问题。我不知道如何存储数据框中的数据。我想将它作为 csv 保存到 databricks 文件存储并从那里上传。但是当我尝试上传文件时,我不知道如何正确设置路径。
使用 boto3 我尝试过
data = open('/dbfs:/FileStore/tables/example.csv', 'rb')
s3.Bucket(BUCKET_NAME).put_object(Key='dbfs:/FileStore/tables/example.csv', Body=data)
但出现以下错误: FileNotFoundError:回溯(最近一次调用最后一次)
<块引用>在 ----> 1 data = open('/dbfs:/FileStore/tables/example.csv', 'rb') 2 3 s3.Bucket(BUCKET_NAME).put_object(Key='dbfs:/FileStore/tables/example.csv', 正文=数据)
FileNotFoundError: [Errno 2] 没有这样的文件或目录: '/dbfs:/FileStore/tables/example.csv'
使用 dbutils 我尝试过:
dbutils.fs.put(s"/mnt/$s3data", "dbfs:/FileStore/tables/example.csv")
但得到:
<块引用>语法错误:无效语法
我正在尝试的是,建立一个数据管道,我可以在其中加载来自 Spotify 的数据,检查它(我已经实现了)并将其存储到 S3,以便稍后在不同的笔记本中使用它进行一些评估。
答案 0 :(得分:0)
您只需要将数据从 Spark 管道直接写入 S3,无需先将其存储到 DBFS。有两种方法:
s3://bucket.../path...
作为参数存储数据到 save
save
中的该位置在您的情况下,Boto3 不起作用,因为您使用了需要本地文件的 Boto3 无法理解的 dbfs:/...
语法。您仍然可以通过将 dbfs:/
替换为 /dbfs/
来解决它 - 这就是所谓的 FUSE 安装...
dbutils.fs.put
用于将应该作为第二个参数的内容放入给定文件中,而不是复制文件 - 为此您可以使用 dbutils.fs.cp
命令。
但我建议使用开头描述的两种方法之一。