我在我的python代码中有一个Dataframe,它在一个databricks笔记本中运行,其中充满了我从Spotify API获得的数据。我将从api获得的数据存储到数据帧中。现在我想把这些数据放到AWS S3上。我尝试了dbutils.fs.put
和boto3s3.Bucket(BUCKET_NAME).put_object
,但既然现在只能从我的S3桶中读取,我总是面临问题,当我试图写一些东西给它。我不知道如何存储数据帧中的数据。我想把它以csv格式保存到databricks文件存储,然后从那里上传。但是当我尝试上传文件时,我不知道如何设置正确的路径。
With boto3 i tried
data = open('/dbfs:/FileStore/tables/example.csv', 'rb')
s3.Bucket(BUCKET_NAME).put_object(Key='dbfs:/FileStore/tables/example.csv', Body=data)
,但得到以下错误:FileNotFoundError: Traceback (most recent call last)
——比;1 data = open('/dbfs:/FileStore/tables/example.csv', 'rb')23 s3.Bucket BUCKET_NAME .put_object(关键= ' dbfs:/FileStore/表/example.csv ',身体=数据)
FileNotFoundError: [Errno 2]没有这样的文件或目录:'/dbfs:/FileStore/表/example.csv">
与butils i try:
dbutils.fs.put(s"/mnt/$s3data", "dbfs:/FileStore/tables/example.csv")
但有:
SyntaxError: invalid syntax
我正在尝试的是,建立一个数据管道,我可以从Spotify加载数据,检查它(我已经实现)并将其存储到S3,稍后在不同的笔记本中使用它来做一些评估。
您只需要从Spark管道直接将数据写入S3,而无需先将其存储到DBFS。有两种方法:
- 直接使用
s3://bucket.../path...
作为save
的参数存储数据 - 将S3 bucket挂载为DBFS,并指向
save
中的位置
在您的情况下,Boto3不能工作,因为您使用的dbfs:/...
语法不被Boto3理解,Boto3期望本地文件。您仍然可以通过将dbfs:/
替换为/dbfs/
来解决这个问题-这就是所谓的FUSE挂载…
dbutils.fs.put
用于将应该作为第二个参数的内容放入给定的文件中,而不是复制文件-为此您可以使用dbutils.fs.cp
命令。
但是我建议使用开头描述的两种方法中的一种。