0

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

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

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

在此处输入图像描述

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

4

1 回答 1

2

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

Spark 使用 Hadoop 文件格式,这需要对数据进行分区——这就是你有part-0000文件的原因。

为了更改文件名,请尝试在您的代码中添加类似这样的内容:

在 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"))
于 2020-10-13T13:06:39.957 回答