当前位置: 首页 > 知识库问答 >
问题:

如何将Spark数据帧(在Datatricks中)写入Blob存储(在Azure中)?

凌俊材
2023-03-14

我在DataBricks工作,在那里我有一个数据帧。

type(df) 
Out: pyspark.sql.dataframe.DataFrame

我唯一想要的就是将这个完整的spark数据帧写入Azure Blob存储。

我找到了这个帖子。所以我尝试了这个代码:

# Configure blob storage account access key globally
spark.conf.set(
  "fs.azure.account.key.%s.blob.core.windows.net" % storage_name,
  sas_key)

output_container_path = "wasbs://%s@%s.blob.core.windows.net" % (output_container_name, storage_name)
output_blob_folder = "%s/wrangled_data_folder" % output_container_path

# write the dataframe as a single file to blob storage
(datafiles
 .coalesce(1)
 .write
 .mode("overwrite")
 .option("header", "true")
 .format("com.databricks.spark.csv")
 .save(output_blob_folder))

运行该代码会导致以下错误。更改拼花和其他格式的“csv”部分也失败了。

org.apache.spark.sql.AnalysisException: CSV data source does not support struct<AccessoryMaterials:string,CommercialOptions:string,DocumentsUsed:array<string>,Enumerations:array<string>,EnvironmentMeasurements:string,Files:array<struct<Value:string,checksum:string,checksumType:string,name:string,size:string>>,GlobalProcesses:string,Printouts:array<string>,Repairs:string,SoftwareCapabilities:string,TestReports:string,endTimestamp:string,name:string,signature:string,signatureMeaning:bigint,startTimestamp:string,status:bigint,workplace:string> data type.;

因此,我的问题(这应该很容易是我的假设):如何将我的火花数据帧从DataBricks写入Azure Blob存储?

我的Azure文件夹结构如下所示:

Account = MainStorage 
Container 1 is called "Data" # containing all the data, irrelevant because i already read this in. 
Container 2 is called "Output" # here I want to store my Spark Dataframe. 

非常感谢提前!

编辑我正在使用Python。然而,我不介意解决方案是否使用其他语言(只要DataBricks支持它们,比如R/Scala等)。如果有效,它就是完美的:-)

共有1个答案

吴飞语
2023-03-14

假设您已经挂载了blob存储,请使用以下方法将数据帧写入csv格式。
请注意,新创建的文件将具有带有csv扩展名的一些默认文件名,因此您可能需要用一致的名称重命名它。

// output_container_path= wasbs://ContainerName@StorageAccountName.blob.core.windows.net/DirectoryName 
val mount_root = "/mnt/ContainerName/DirectoryName"
df.coalesce(1).write.format("csv").option("header","true").mode("OverWrite").save(s"dbfs:$mount_root/") 
 类似资料:
  • 我有以下spark数据帧。一个来自文本文件,另一个来自Databricks中的Spark表: 尽管数据完全相同,但以下代码报告了差异。我希望df3为空: 我需要在比较之前订购数据吗?-如果是,我该怎么做 我看不出上面的连接是在哪里完成的。它将如何匹配行?[ID]和[帐户]是主键 以上是比较2个数据帧的最佳方法吗 这是数据-其中[ID]和[帐户]是主键

  • 我正在尝试使用pyspark来分析我在数据砖笔记本上的数据。Blob 存储已装载到数据砖群集上,在分析后,希望将 csv 写回 blob 存储。由于 pyspark 以分布式方式工作,csv 文件被分解为小块并写入 Blob 存储。如何克服这个问题,并在我们使用pyspark进行分析时在blob上编写为单个csv文件。谢谢。

  • 我正试图从本地Spark集群将Spark DataFrame存储为Azure Blob存储中的CSV 首先,我用Azure Account/Account键设置配置(我不确定什么是正确的配置,所以我已经设置了所有这些) 似乎这个问题已经在数据库论坛上报告了!! 在Azure Blob上存储DataFrame的正确方法是什么?

  • null 非常感谢任何指向文档或非常基本的示例的指针。

  • 我想使用Python中的Azure函数将JSON数据作为. json文件上传到Azure存储Blob。 因为我使用的是Azure函数,而不是实际的服务器,所以我不想(也可能无法)在本地内存中创建一个临时文件,并使用Azure blob存储客户端库v2将该文件上载到Azure blob存储。1对于Python(这里有参考链接)。因此,我想为Azure函数使用输出blob存储绑定(这里有参考链接)。

  • 我有一个map-reduce作业,并且reducer获得一个驻留在Azure Blob存储中的文件的绝对地址,并且reducer应该打开它并读取它的内容。在配置Hadoop集群(HDInsight)时,我添加了包含文件的存储帐户。因此,还原器必须有权访问这个Blob存储,但Blob存储不是我的作业的默认HDFS存储。我的reducer中有以下代码,但它给了我一个FileNotFound错误消息。