Python 将数据从DataRicks spark笔记本内的数据框存储到S3存储桶
我的python代码中有一个Dataframe,它运行在DataRicks笔记本中,里面充满了我从SpotifyAPI获得的数据。我将从api获取的数据存储到数据帧中。 现在我想把这些数据带到AWS 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文件
dbutils.fs.put
和boto3s3.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
save
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
的名称,以避免重新定义