python - 为什么我可以从 Azure Blob 存储读取但无法写入?
问题描述
因为我无法将镶木地板文件写入 Azure Blob 存储,所以我把头撞在墙上。在我的 Azure Databricks Notebook 上,我基本上: 1. 从与数据帧相同的 blob 存储读取 CSV 并 2. 尝试将数据帧写入相同的存储。
我能够读取 CSV,但是当我尝试编写镶木地板文件时出现此错误。
这是堆栈跟踪:
由于阶段故障而中止作业:阶段 8.0 中的任务 0 失败 4 次,最近一次失败:阶段 8.0 中丢失任务 0.3(TID 20、10.139.64.5、执行程序 0):shaded.databricks.org.apache.hadoop.fs。 azure.AzureException: java.io.IOException at shaded.databricks.org.apache.hadoop.fs.azure.AzureNativeFileSystemStore.storeEmptyFolder(AzureNativeFileSystemStore.java:1609) ... ... 引起:com.microsoft.azure.storage .StorageException:指定的资源不存在。
这是我的python代码:
spark.conf.set("fs.azure.sas.my_container.my_storage.blob.core.windows.net", dbutils.secrets.get(scope = "my_scope", key = "my_key"))
读取 csv
df100 = spark.read.format("csv").option("header", "true").load("wasbs://my_container@my_storage.blob.core.windows.net/folder/revenue.csv")
写实木复合地板
df100.write.parquet('wasbs://my_container@my_storage.blob.core.windows.net/f1/deh.parquet')
结尾
解决方案
有效的方法涉及通过其 URL 直接写入 Azure blob 存储容器。当然,使用这种方法,您不必将容器挂载到 DBFS。
下面是用于将 CSV 数据直接写入 Azure Databricks Notebook 中的 Azure Blob 存储容器的代码片段。
# Configure blob storage account access key globally
spark.conf.set(
"fs.azure.account.key.%s.blob.core.windows.net" % storage_name,
sas_key)
output_container_path = "wasbs://%s@%s.blob.core.windows.net" % (output_container_name, storage_name)
output_blob_folder = "%s/wrangled_data_folder" % output_container_path
# write the dataframe as a single file to blob storage
(dataframe
.coalesce(1)
.write
.mode("overwrite")
.option("header", "true")
.format("com.databricks.spark.csv")
.save(output_blob_folder))
# Get the name of the wrangled-data CSV file that was just saved to Azure blob storage (it starts with 'part-')
files = dbutils.fs.ls(output_blob_folder)
output_file = [x for x in files if x.name.startswith("part-")]
# Move the wrangled-data CSV file from a sub-folder (wrangled_data_folder) to the root of the blob container
# While simultaneously changing the file name
dbutils.fs.mv(output_file[0].path, "%s/predict-transform-output.csv" % output_container_path)
有关更多详细信息,请参阅“如何将数据从 Azure Databricks 笔记本写入 Azure Blob 存储容器”。
希望这可以帮助。
推荐阅读
- sql - 如何将查询转换为使用联接?
- sql - 行号如 1 - 1.1 1.2 1.3 2 - 2.1 2.2 2.3
- ruby-on-rails - 为什么未初始化常量 Spree::V2::Storefront::Product?
- javascript - Javascript 自动完成从 Id 更改为 Name
- python-3.x - OpenPyXL 不会保存到带有替换更改的新 Excel 文件
- ios - UIView transitionWIthView 简单的改变图像动画——如何明确提及'self'
- python - 在 Python 中使用数值积分的拉普拉斯变换精度很差
- eclipse - 在嵌入式码头 9.4.x 中热部署一个爆炸的 webapp
- node.js - 如何使用 sequelize(nodejs) 从第 10 行到第 15 行从数据库中获取数据
- python - 硒问题找到隐藏按钮