繁体   English   中英

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

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

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

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

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

在此处输入图片说明

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

不幸的是,使用标准 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"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM