从 Azure Databricks 中的 azure 存储容器读取文件并修改文件名

Read files And Modify filename from the azure storage containers in Azure Databricks

我正在摄取大型 XML 文件并根据 XML 元素生成单个 JSON,我在 azure databricks 中使用 SPARK-XML。 将 json 文件创建为

的代码
commercialInfo
.write
.mode(SaveMode.Overwrite)
.json("/mnt/processed/" + "commercialInfo")

我能够提取 XML 元素节点并写入 Azure 存储容器。 在容器中创建了一个文件夹,在文件夹中我们使用 GUID 命名,而不是文件名。

任何人都可以建议我们是否可以控制在容器中创建的文件名,即将 part-0000 转换为有意义的名称,以便可以使用某些 Azure Blob 触发器读取它。

不幸的是,无法使用标准 spark 库控制文件名,但您可以使用 Hadoop API 管理文件系统 - 将输出保存在临时目录中,然后将文件移动到请求的路径。

Spark uses Hadoop File Format, which requires data to be partitioned - that's why you have part-0000 files.

为了更改文件名,请尝试在您的代码中添加如下内容:

在 Scala 中它看起来像:

import org.apache.hadoop.fs._
val fs = FileSystem.get(sc.hadoopConfiguration)
val file = fs.globStatus(new Path("path/file.csv/part*"))(0).getPath().getName()

fs.rename(new Path("csvDirectory/" + file), new Path("mydata.csv"))
fs.delete(new Path("mydata.csv-temp"), true)

import org.apache.hadoop.fs._
val fs = FileSystem.get(sc.hadoopConfiguration)
fs.rename(new Path("csvDirectory/data.csv/part-0000"), new Path("csvDirectory/newData.csv"))