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

2024-06-01 07:03:47 发布

您现在位置:Python中文网/ 问答频道 /正文

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

in ----> 1 data = open('/dbfs:/FileStore/tables/example.csv', 'rb') 2 3 s3.Bucket(BUCKET_NAME).put_object(Key='dbfs:/FileStore/tables/example.csv', Body=data)

FileNotFoundError: [Errno 2] No such file or directory: '/dbfs:/FileStore/tables/example.csv'

对于dbutils,我尝试了:

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

但是得到:

SyntaxError: invalid syntax

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


Tags: csv数据nametablesdataobjects3bucket
1条回答
网友
1楼 · 发布于 2024-06-01 07:03:47

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

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

在您的例子中,Boto3不起作用,因为您使用的dbfs:/...语法是Boto3不理解的,它需要本地文件。您仍然可以通过将dbfs:/替换为/dbfs/来解决这个问题-这就是所谓的保险丝安装

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

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

相关问题 更多 >