无法从 azure databricks 在 azure data Lake 中保存文件

Posted

技术标签:

【中文标题】无法从 azure databricks 在 azure data Lake 中保存文件【英文标题】:Failed to save a file in azure data lake from azure data bricks 【发布时间】:2020-03-05 15:44:00 【问题描述】:

我正在尝试将字符串内容作为 XML 内容保存到 Azure 数据湖中。

一个字符串变量包含下面提到的xml内容。

<project>
    <dateformat>dd-MM-yy</dateformat>
    <timeformat>HH:mm</timeformat>
    <useCDATA>true</useCDATA>
</project>

我已使用以下代码将文件处理到数据湖中。

xmlfilewrite = "/mnt/adls/ProjectDataDecoded.xml"
with open(xmlfilewrite , "w") as f:
    f.write(project_processed_var)

它会引发以下错误: 没有这样的文件或目录:'/mnt/adls/ProjectDataDecoded.xml"

我可以使用上述挂载点访问数据湖,但无法使用上述“打开”功能。

谁能帮帮我?

【问题讨论】:

【参考方案1】:

问题解决了。

在数据块中,当 Azure Data Lake 上存在挂载点时,我们需要将“/dbfs”添加到路径并将其传递给 OPEN 函数。 使用下面的代码解决了这个问题

xmlfilewrite = "/dbfs/mnt/adls/ProjectDataDecoded.xml"
with open(xmlfilewrite , "w") as f:
    f.write(project_processed_var)

【讨论】:

【参考方案2】:

您可以尝试使用Spark-XML library。将您的字符串转换为数据框,其中每一行表示一个项目。然后就可以这样写到ADLS了。

df.select("dateformat", "timeformat","useCDATA").write \
  .format('xml') \
  .options(rowTag='project', rootTag='project') \
  .save('/mnt/adls/ProjectDataDecoded.xml')

这是包含外部库的方法 -https://docs.databricks.com/libraries.html#create-a-library

【讨论】:

我已尝试按照建议保存 \XML,但它以不同的格式保存,如下所示。 ``` <项目> <日期格式>dd-MM-yy</dateformat> <timeformat>HH:mm</timeformat> <useCDATA>true</useCDATA> ``` 请告诉我如何将字符串转换为数据框。

以上是关于无法从 azure databricks 在 azure data Lake 中保存文件的主要内容,如果未能解决你的问题,请参考以下文章

无法从 databricks pyspark 工作人员写入 Azure Sql DataWarehouse

更改同一单元格中的魔术标签 - Azure Databricks

无法使用 jdbc 和 spark 连接器从 databricks 集群连接到 Azure 数据库 for MySQL 服务器

Azure Databricks 将 JSON 数据写入 Parquet 文件引发错误:TypeError:无法推断类型的架构

Databricks Connect:无法连接到 azure 上的远程集群,命令:“databricks-connect test”停止

无法使用 Databricks 列出 Azure Storage Gen 2 文件