首页 > 解决方案 > 在 azure blob 存储中重命名 spark 输出 csv

问题描述

我有一个 Databricks 笔记本设置,如下所示;

我的问题是,你不能命名文件输出文件,我需要一个静态 csv 文件名。

有没有办法在pyspark中重命名它?

## Blob Storage account information
storage_account_name = ""
storage_account_access_key = ""

## File location and File type
file_location = "path/.blob.core.windows.net/Databricks_Files/input"
file_location_new = "path/.blob.core.windows.net/Databricks_Files/out"
file_type = "csv"

## Connection string to connect to blob storage
spark.conf.set(
  "fs.azure.account.key."+storage_account_name+".blob.core.windows.net",
  storage_account_access_key)

数据转换后输出文件

dfspark.coalesce(1).write.format('com.databricks.spark.csv') \
  .mode('overwrite').option("header", "true").save(file_location_new)

然后将文件写入“part-00000-tid-336943946930983 .....csv”的位置

目标是拥有“Output.csv”

我看到的另一种方法只是在 python 中重新创建它,但还没有在文档中遇到如何将文件输出回 blob 存储。

我知道从 Blob 存储中检索的方法是.get_blob_to_path via microsoft.docs

非常感谢这里的任何帮助。

标签: pythonazureapache-sparkpysparkazure-storage

解决方案


Hadoop/Spark 会将每个分区的计算结果并行输出到一个文件中,因此您将在您命名part-<number>-....的 HDFS 输出路径中看到许多文件。Output/

如果要将一次计算的所有结果输出到一个文件中,可以通过命令合并它们,或者使用like using函数hadoop fs -getmerge /output1/part* /output2/Output.csv设置reduce进程的数量。1coalesce(1)

所以在你的场景中,你只需要调整调用这些函数的顺序,使coalease函数在函数的前面被save调用,如下所示。

dfspark.write.format('com.databricks.spark.csv') \
  .mode('overwrite').option("header", "true").coalesce(1).save(file_location_new)

推荐阅读