【问题标题】:Read files And Modify filename from the azure storage containers in Azure Databricks从 Azure Databricks 中的 azure 存储容器读取文件并修改文件名
【发布时间】:2020-10-13 06:46:46
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: scala azure-blob-storage azure-databricks apache-spark-xml


    【解决方案1】:

    不幸的是,使用标准 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-12-25
      • 2020-03-23
      • 2023-03-18
      • 1970-01-01
      • 2022-01-01
      • 2012-06-16
      • 2013-06-08
      • 2022-01-19
      • 2021-12-26
      相关资源
      最近更新 更多