【问题标题】:Databricks load file from path which contains equals (=) signDatabricks 从包含等号 (=) 符号的路径加载文件
【发布时间】:2022-01-23 12:14:39
【问题描述】:

我希望将 Azure Monitor 数据从 Log Analytics 导出到存储帐户,并使用 PySpark 将 JSON 文件读入 Databricks。

Log Analytics 导出的 blob 路径包含一个等号 (=) 并且在使用该路径时 Databricks 抛出和异常。

WorkspaceResourceId=/subscriptions/subscription-id/resourcegroups/<resource-group>/providers/microsoft.operationalinsights/workspaces/<workspace>/y=<four-digit numeric year>/m=<two-digit numeric month>/d=<two-digit numeric day>/h=<two-digit 24-hour clock hour>/m=<two-digit 60-minute clock minute>/PT05M.json

Log Analytics Data Export

有没有办法转义等号,以便可以从 blob 位置加载 JSON 文件?

【问题讨论】:

  • 在 azure blob 存储支持的 dbfs 上读取包含 = 的路径没有问题(使用spark.read.format("json").load(path) 读取)。您能否详细说明您如何读取数据并发布您收到的异常。
  • 奇怪。我什至在使用 dbutils.fs.ls() 时出错。您使用的是带有分层命名空间的 Blob 存储还是 ADLS?
  • 我正在使用启用了分层命名空间的 ADLS。
  • 必须是 blob 端点。将尝试使用 ADLS HNS。

标签: pyspark azure-databricks azure-log-analytics


【解决方案1】:

我尝试了参考微软文档的类似用例,以下是步骤:

  1. 安装存储容器。我们可以用下面的python代码来做,确保你传递的所有参数都是正确的,因为不正确的参数会导致多个不同的错误。

     dbutils.fs.mount(
           source = "wasbs://<container-name>@<storage-account-name>.blob.core.windows.net",
           mount_point = "/mnt/<mount-name>",
           extra_configs = {"<conf-key>":dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")})
    

    以下是参数说明:

    • &lt;storage-account-name&gt; 是你的 Azure Blob 存储帐户的名称。
    • &lt;container-name&gt; 是 Azure Blob 存储帐户中容器的名称。
    • &lt;mount-name&gt; 是一个 DBFS 路径,表示 Blob 存储容器或容器内的文件夹(在 source 中指定)将在 DBFS 中挂载的位置。
    • &lt;conf-key&gt; 可以是 fs.azure.account.key.&lt;storage-account-name&gt;.blob.core.windows.net 或 fs.azure.sas.&lt;container-name&gt;.&lt;storage-account-name&gt;.blob.core.windows.net
    • dbutils.secrets.get(scope = "&lt;scope-name&gt;", key = "&lt;key-name&gt;") 获取已作为secret 存储在secret scope 中的密钥。
  2. 然后你可以访问这些文件如下:

     df = spark.read.text("/mnt/<mount-name>/...")
     df = spark.read.text("dbfs:/<mount-name>/...")
    

还有多种访问文件的方式,doc中都明确提到了。

并检查此 Log Analytics 工作区 doc 以了解有关将数据导出到 Azure 存储的信息。

【讨论】:

  • 问题是微软在几个月和几分钟内使用相同的名称m。结果,当您使用分区推理读取时,Spark 作业会因为重复的列而失败
猜你喜欢
  • 1970-01-01
  • 2011-07-23
  • 2023-03-08
  • 2013-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-19
  • 2015-07-21
相关资源
最近更新 更多