gpt4 book ai didi

azure - FileUtils 写入方法在 Azure Databricks 上不起作用

转载 作者:行者123 更新时间:2023-12-03 00:55:31 29 4
gpt4 key购买 nike

我在 Databricks 集群的驱动程序上写入文件(作为临时文件)时遇到问题。我公司的 Azure Databricks 上有一个 scala 笔记本,其中包含以下代码行:

val xml: String = Controller.requestTo(url)
val bytes: Array[Byte] = xml.getBytes

val path: String = "dbfs:/data.xml"
val file: File = new File(path)
FileUtils.writeByteArrayToFile(file, bytes)

dbutils.fs.ls("dbfs:/")

val df = spark.read.format("com.databricks.spark.xml")
.option("rowTag", "generic:Obs")
.load(path)

df.show

file.delete()

但是它崩溃并显示org.apache.hadoop.mapreduce.lib.input.InvalidInputException:输入路径不存在:dbfs:/data.xml。当我在 dbfs 的根目录上运行 ls 时,它不会显示文件 data.xml,所以对我来说 FileUtils 没有完成它的工作。更让我陷入麻烦的是,以下代码在同一个集群、同一个 Azure 资源组、同一个 Databricks 实例上运行时有效,但在另一个笔记本中运行:

val path: String = "mf-data.grib"
val file: File = new File(path)
FileUtils.writeByteArrayToFile(file, bytes)

我尝试重新启动集群,从路径中删除“dbfs:/”,将文件放入dbfs:/tmp/目录中,使用FileUtils.writeStringToFile(file, xml 、StandardCharsets.UTF_8) 而不是 FileUtils.writeByteArrayToFile 但这些解决方案都不起作用,即使将它们组合起来也是如此。

最佳答案

如果您使用本地 API,例如 File,则需要使用相应的 local file access - 您需要使用 /dbfs/ 作为路径前缀,而不是使用 dbfs:/,因此您的代码将如下所示:

val file: File = new File(path.replaceFirst("dbfs:", "/dbfs")

关于azure - FileUtils 写入方法在 Azure Databricks 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70187049/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com