我的python代码中有一个dataframe,它运行在databricks笔记本中,里面装满了我从spotifyapi获得的数据。我将从api获得的数据存储到一个Dataframe中。现在我想把这些数据带到awss3。我试过了 dbutils.fs.put
和boto3 s3.Bucket(BUCKET_NAME).put_object
但由于现在只能从s3存储桶中读取数据,所以当我试图向它写入内容时,我总是面临问题。我不知道如何存储Dataframe中的数据。我想把它作为csv保存到databricks文件库,然后从那里上传。但当我试图上传一个文件时,我不知道如何设置正确的路径。
我试过了
data = open('/dbfs:/FileStore/tables/example.csv', 'rb')
s3.Bucket(BUCKET_NAME).put_object(Key='dbfs:/FileStore/tables/example.csv', Body=data)
但出现以下错误:filenotfounderror:traceback(最近一次调用)
在---->1 data=open('/dbfs:/filestore/tables/example.csv','rb')2 3 s3.bucket(bucket\u name).put\u object(key='dbfs:/filestore/tables/example.csv',body=data)
filenotfounderror:[errno 2]没有这样的文件或目录:'/dbfs:/filestore/tables/example.csv'
我试着用dbutils:
dbutils.fs.put(s"/mnt/$s3data", "dbfs:/FileStore/tables/example.csv")
但是得到:
语法错误:无效语法
我正在尝试的是,建立一个数据管道,在那里我可以从spotify加载数据,检查它(我已经实现了)并将它存储到s3,稍后在另一个笔记本中使用它来做一些评估。
1条答案
按热度按时间kzmpq1sx1#
您只需要将数据直接从spark管道写入s3,而无需先将其存储到dbfs。有两种方法:
直接使用
s3://bucket.../path...
作为论据save
将您的s3 bucket装载为dbfs,并指向save
在你的情况下,boto3不起作用,因为你正在使用dbfs:/...
需要本地文件的boto3不理解的语法。您仍然可以通过替换dbfs:/
与/dbfs/
-这就是所谓的保险丝座。。。dbutils.fs.put
用于将应作为第二个参数的内容放入给定文件中,而不是复制该文件-您可以使用dbutils.fs.cp
命令。但我建议使用开头描述的两种方法之一。