微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决从Azure Databricks中的Azure存储容器中读取文件并修改文件名

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

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

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

enter image description here

任何人都可以建议我们是否可以控制在容器中创建的文件名,即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)

OR

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"))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。