繁体   English   中英

如何从 Azure Databricks 将 JSON 写入 Azure 队列

[英]How to write a JSON to Azure queue from Azure Databricks

我正在尝试从 BLOB 读取 JSON 文件并将该文件写入 Azure 队列中。 读取部分工作正常,但在写入时会引发错误。

我已经尝试了我正在尝试写入的队列文件夹的 URL 作为参数 for.save()

这是我的代码:

storage_account_name="mrktmabcdestaaue"
storage_account_access_key="myurl=="
file_location="wasbs://myfolder@mrktmabcdestaaue.blob.core.windows.net/input.json"
file_type="json"
spark.conf.set(
        "fs.azure.account.key."+storage_account_name+".blob.core.windows.net",
  storage_account_access_key)
df = spark.read.option("multiline", "true").format(file_type).load(file_location)

df.write.mode("overwrite").format("com.databricks.spark.json").save("wasbs://myqueue@mrktmabcdestaaue.queue.core.windows.net")

我的输入 Json:

{
"Name": "Abc",
"Age": 18,
"City": "def"
}

我收到的错误消息是:

"shaded.databricks.org.apache.hadoop.fs.azure.AzureException: shaded.databricks.org.apache.hadoop.fs.azure.AzureException: Unable to access container myqueue in account mrktmabcdestaaue.queue.core.windows.net using匿名凭据,并且在配置中找不到他们的凭据。”

听起来您的集群未附加到该存储帐户。 重新创建您的集群并确保该帐户已附加到集群。

您的存储位置应该是wasbs://myfolder@mrktmabcdestaaue.blob.core.windows.net/input.json

更多细节,你可以参考这篇文章

不支持此方案。 您可以写入 Blob 存储容器,但不能写入存储队列。

Databricks Azure 队列 (AQS) 连接器使用 Azure 队列存储 (AQS) 来提供优化的文件源,让您可以查找写入 Z3A580F142203677F1F0BC30898 容器的新文件而无需重复列出所有 B353 文件存储 (BABSF)。 有关更多详细信息,请参阅文档 所以也只能用来读取文件。

如果您想将阅读的内容传递给消费者,您可以使用 Azure EventHubs 或 Apache Kafka(在 Azure HDInsight 或 Confluent 上)。 在这种情况下,您将使用结构化流。 所以你必须有一个流数据框。 写回 stream 看起来像这样:

df \
.writeStream \
.format("eventhubs") \
.options(**ehConf) \
.option("checkpointLocation", checkploc) \
.start()

其他选项可能是使用 Azure 事件网格。 最后,这取决于您想要实现的具体场景。

我有同样的场景,尝试了同样的事情,结果来到了这里。

我也尝试dbutils.fs.mount但无法像使用 blob 存储那样挂载存储队列。

我最终使用了一个存储队列客户端:
https://pypi.org/project/azure-storage-queue/

然后我必须阅读每条 json 消息并为每个消息调用 queue.send_message。 不是很好,但找不到更好的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM