python—将databricks spark笔记本中的Dataframe中的数据存储到s3 bucket中

gdx19jrr  于 2021-07-12  发布在  Spark
关注(0)|答案(1)|浏览(415)

我的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,稍后在另一个笔记本中使用它来做一些评估。

kzmpq1sx

kzmpq1sx1#

您只需要将数据直接从spark管道写入s3,而无需先将其存储到dbfs。有两种方法:
直接使用 s3://bucket.../path... 作为论据 save 将您的s3 bucket装载为dbfs,并指向 save 在你的情况下,boto3不起作用,因为你正在使用 dbfs:/... 需要本地文件的boto3不理解的语法。您仍然可以通过替换 dbfs://dbfs/ -这就是所谓的保险丝座。。。 dbutils.fs.put 用于将应作为第二个参数的内容放入给定文件中,而不是复制该文件-您可以使用 dbutils.fs.cp 命令。
但我建议使用开头描述的两种方法之一。

相关问题