python - 在 azure blob 存储中重命名 spark 输出 csv
问题描述
我有一个 Databricks 笔记本设置,如下所示;
- 到 Blob 存储帐户的 pyspark 连接详细信息
- 通过 spark 数据框读取文件
- 转换为熊猫 Df
- pandas Df 上的数据建模
- 转换为火花 Df
- 写入单个文件中的 blob 存储
我的问题是,你不能命名文件输出文件,我需要一个静态 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
非常感谢这里的任何帮助。
解决方案
Hadoop/Spark 会将每个分区的计算结果并行输出到一个文件中,因此您将在您命名part-<number>-....
的 HDFS 输出路径中看到许多文件。Output/
如果要将一次计算的所有结果输出到一个文件中,可以通过命令合并它们,或者使用like using函数hadoop fs -getmerge /output1/part* /output2/Output.csv
设置reduce进程的数量。1
coalesce(1)
所以在你的场景中,你只需要调整调用这些函数的顺序,使coalease
函数在函数的前面被save
调用,如下所示。
dfspark.write.format('com.databricks.spark.csv') \
.mode('overwrite').option("header", "true").coalesce(1).save(file_location_new)
推荐阅读
- jquery - 更改 .popover-user-notifications 样式不起作用?
- c# - 是否有 Windows 事件来确定蓝牙设备是否正在配对
- c# - LINQ - 查找给定列表中的所有项目都包含在一个集合中的所有记录
- scala - 在同一个项目中使用 spire 和微风会使 intellij 感到困惑
- entity-framework - 实体框架多对多顺序
- python - Facebook 先知中的 'yhat'、'yhat_lower'、'yhat_upper' 是什么?
- git - 没有注册源代码控制提供商 - 如何在 mac 上的可视代码中注册 SCM?
- java - 如何使 BLOB 在 Oracle 和 PostgreSQL 上工作?
- ios - Swift - IOS,Spring:使用 StompClientLib 和 Spring 发送和接收 STOMP 消息的问题
- linux - Windows 上的 Linux 容器 (LCOW) 功能与在 Windows 上运行 Linux VM