我的python代码中有一个Dataframe,它运行在DataRicks笔记本中,里面充满了我从SpotifyAPI获得的数据。我将从api获取的数据存储到数据帧中。
现在我想把这些数据带到AWS S3。我尝试了dbutils.fs.put
和boto3s3.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:回溯(上次最近的调用)
in ----> 1 data = open('/dbfs:/FileStore/tables/example.csv', 'rb') 2 3 s3.Bucket(BUCKET_NAME).put_object(Key='dbfs:/FileStore/tables/example.csv', Body=data)
FileNotFoundError: [Errno 2] No such file or directory: '/dbfs:/FileStore/tables/example.csv'
对于dbutils,我尝试了:
dbutils.fs.put(s"/mnt/$s3data", "dbfs:/FileStore/tables/example.csv")
但是得到:
SyntaxError: invalid syntax
我正在尝试的是,建立一个数据管道,在这里我可以从Spotify加载数据,检查它(我已经实现了),并将其存储到S3,稍后在另一个笔记本中使用它进行一些评估
您只需要从Spark管道直接将数据写入S3,无需先将其存储到DBFS。有两种方法:
s3://bucket.../path...
作为save
的参数存储数据save
中的该位置在您的例子中,Boto3不起作用,因为您使用的
dbfs:/...
语法是Boto3不理解的,它需要本地文件。您仍然可以通过将dbfs:/
替换为/dbfs/
来解决这个问题-这就是所谓的保险丝安装dbutils.fs.put
用于将应作为第二个参数的内容放入给定文件,而不是复制该文件-为此,可以使用dbutils.fs.cp
命令但我建议使用开头描述的两种方法之一
相关问题 更多 >
编程相关推荐