将数据帧中的数据存储到S3桶中



我在我的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。有两种方法:

  1. 直接使用s3://bucket.../path...作为save的参数存储数据
  2. 将S3 bucket挂载为DBFS,并指向save
  3. 中的位置

在您的情况下,Boto3不能工作,因为您使用的dbfs:/...语法不被Boto3理解,Boto3期望本地文件。您仍然可以通过将dbfs:/替换为/dbfs/来解决这个问题-这就是所谓的FUSE挂载…

dbutils.fs.put用于将应该作为第二个参数的内容放入给定的文件中,而不是复制文件-为此您可以使用dbutils.fs.cp命令。

但是我建议使用开头描述的两种方法中的一种。

最新更新