当前位置: 首页 > 知识库问答 >
问题:

文件实用程序写入方法不适用于 Azure 数据砖

松锐藻
2023-03-14

我在编写数据砖集群的驱动程序(作为临时文件)上文件时遇到问题。我在公司的Azure数据砖上有一个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资源组、同一个Database ricks实例但在另一个笔记本上运行时有效:

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</code>,但这些解决方案都不起作用,即使在组合它们时也是如此。


共有2个答案

弘康安
2023-03-14

尝试删除<code>dbfs</code>here:<code>val path:String=“dbfs:/data.xml”</code>以便于理解。我给出了3个不同的神奇命令单元<code>%sh、%fs、%scala</code>。您可以在这里引用:

仲绍晖
2023-03-14

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

val file: File = new File(path.replaceFirst("dbfs:", "/dbfs")
 类似资料:
  • 我目前正在使用带有Spring Data commons 1.9.1和Spring JPA 1.7.1的JpaSort。我需要使用QueryDSL,因为JPA不允许为空值定义排序。 这是我的存储库 我在我的控制器中这样做: 这就是我对JPA的看法: 这是我为QueryDSL更改的内容: 然而,似乎什么都没有得到整理。我已经启用了调试日志记录,我看到了这一点: 如果我将其更改为: 然后,按我的“数据

  • 我有一个应用程序,它试图将字符串序列化为资产目录下的文本文件。写入操作不会引发任何异常,尽管写入操作后文件为空(这意味着写入操作没有成功)。 我的问题是为什么不能写入文件。

  • 您好,我正在尝试使用PostConstruct方法初始化字段,但在测试中,此方法不会填充bidiMap字段。 有没有办法模拟字段,它是的字段? 测试: 正在测试的类:

  • 起初,我在使用< code>writeAndFlush(...)直到我偶然发现了这个修复。现在,我已经可以使用< code>writeAndFlush(...)每个字符串都带有后缀/r/n。当我尝试发送< code>ByteBuf对象时,问题仍然存在。显然,我不能只在消息末尾添加/r/n。对此有什么解决办法吗? 如果有帮助,我将使用

  • 问题内容: 阅读有关Java文件I / O管理的一些资料,我知道输入和输出操作有不止一种选择。 这些是: 和 和 和 和 类 以下什么是文本文件管理的最佳选择? 序列化的最佳替代方法是什么?Java NIO对此有何评论? 问题答案: 两种数据 一般来说,有两个“世界”: 二进制数据 文字数据 当它是一个文件(或插座,或在DB,还是......一个BLOB),那么它总是二进制数据 第一次 。 这些二

  • 问题内容: 我尝试使用JLabel’s之后尝试在屏幕上绘制图像,现在正在尝试paintComponent方法。我在看不到任何结果并且该方法没有被调用之后尝试插入断点,并且什么也没有出现。我该怎么办?这是我的重要代码- ` 另外,如果有区别,我正在使用JFrame而不是JPanel或组件。 问题答案: 没有方法。您应该避免直接绘制到框架上,而应使用和覆盖其方法 您还应该使用@Override批注,如