Python 将数据从DataRicks spark笔记本内的数据框存储到S3存储桶

Python 将数据从DataRicks spark笔记本内的数据框存储到S3存储桶,python,amazon-web-services,apache-spark,amazon-s3,databricks,Python,Amazon Web Services,Apache Spark,Amazon S3,Databricks,我的python代码中有一个Dataframe,它运行在DataRicks笔记本中,里面充满了我从SpotifyAPI获得的数据。我将从api获取的数据存储到数据帧中。 现在我想把这些数据带到AWS S3。我尝试了dbutils.fs.put和boto3s3.Bucket(Bucket\u NAME)。put\u object,但由于现在只能从我的s3 Bucket中读取数据,当我试图向它写入内容时,我总是面临问题。我不知道如何存储数据框中的数据。我考虑将其保存为csv到databricks文件

我的python代码中有一个Dataframe,它运行在DataRicks笔记本中,里面充满了我从SpotifyAPI获得的数据。我将从api获取的数据存储到数据帧中。 现在我想把这些数据带到AWS S3。我尝试了
dbutils.fs.put
和boto3
s3.Bucket(Bucket\u NAME)。put\u object
,但由于现在只能从我的s3 Bucket中读取数据,当我试图向它写入内容时,我总是面临问题。我不知道如何存储数据框中的数据。我考虑将其保存为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:回溯(上次最近的调用)

在 ---->1 data=open('/dbfs:/FileStore/tables/example.csv','rb') 2. 3.s3.Bucket(Bucket\u NAME).put\u对象(Key='dbfs:/FileStore/tables/example.csv', 正文=数据)

FileNotFoundError:[Errno 2]没有这样的文件或目录: “/dbfs:/FileStore/tables/example.csv”

对于dbutils,我尝试了:

dbutils.fs.put(s"/mnt/$s3data", "dbfs:/FileStore/tables/example.csv")
但是得到:

SyntaxError:无效语法


我正在尝试的是,建立一个数据管道,在那里我可以从Spotify加载数据,检查它(我已经实现了)并将其存储到S3,以便稍后在另一个笔记本中使用它来进行一些评估。

您只需从Spark管道直接将数据写入S3,无需先将其存储到DBFS。有两种方法:

  • 直接使用
    s3://bucket…/path…
    作为
    save
  • 将S3存储桶装载为DBFS,并在
    save
  • 在您的情况下,Boto3不起作用,因为您使用的是期望本地文件的Boto3不理解的
    dbfs:/…
    语法。您仍然可以通过将
    dbfs://
    替换为
    /dbfs/
    来解决此问题-这就是所谓的保险丝安装

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


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

    您可以使用dataframewriter将数据保存到s3或DataRicks dbfs上。谢谢,问题是,当我使用'df.write(“DestinationPath”)'时,我收到一条错误消息“AttributeError:'DataFrame'对象没有属性'write'”,谢谢您提供的信息。但我不太明白怎么做。当我尝试获取我的数据帧
    df.save(“s3:/myBucketName/”
    时,我得到了一个错误“AttributeError:'Dataframe'对象没有属性'save'”,当我尝试使用
    df.write.csv(“s3:/myBucketName/”
    时,我得到了同样的结果“AttributeError:'Dataframe'对象没有属性'write'”,你需要执行
    df.write.format(“…”).mode(“append”).save(…)
    请参阅Spark文档:您已经拥有Pandas数据帧,而不是Spark数据帧。。。将Pandas dataframe的名称更改为类似于
    pdf
    的名称,以避免重新定义