最终目标是能够将 Azure 容器中的数据读取到 PySpark 数据帧中。
到目前为止的步骤
到目前为止我所遵循的步骤:
编写此代码
spark = SparkSession(SparkContext()) spark.conf.set( "fs.azure.account.key.%s.blob.core.windows.net" % AZURE_ACCOUNT_NAME, AZURE_ACCOUNT_KEY ) spark.conf.set( "fs.wasbs.impl", "org.apache.hadoop.fs.azure.NativeAzureFileSystem" ) container_path = "wasbs://%s@%s.blob.core.windows.net" % ( AZURE_CONTAINER_NAME, AZURE_ACCOUNT_NAME ) blob_folder = "%s/%s" % (container_path, AZURE_BLOB_NAME) df = spark.read.format("text").load(blob_folder) print(df.count())
- 设置对我的 Azure 容器的公共(public)访问和匿名访问。
- 添加了两个 jar
hadoop-azure-2.7.3.jar
和azure-storage-2.2.0.jar
到路径。
问题
但现在我遇到了这个错误:Caused by: com.microsoft.azure.storage.StorageException: Incorrect Blob type, please use the correct Blob type to access a blob on the server. Expected BLOCK_BLOB, actual UNSPECIFIED.
。
我无法找到任何谈论/解决此问题的内容。我发现的最接近的是 this这不起作用/已经过时了。
编辑
我发现azure-storage-2.2.0.jar
不支持APPEND_BLOB
。我升级到azure-storage-4.0.0.jar
它将错误从 Expected BLOCK_BLOB, actual UNSPECIFIED.
更改为至Expected BLOCK_BLOB, actual APPEND_BLOB.
。有谁知道如何传递期望的正确类型?
有人可以帮我解决这个问题吗?
我对使用 Azure 的专业知识很少,但我认为读取和创建 Spark 数据帧应该不会这么困难。我做错了什么?
最佳答案
您正在尝试读取 WASB 不支持的追加 blob。
我认为你应该尝试使用 abfss,它确实支持它。 但我不知道在自定义 Spark 环境中使用会有多困难。
例如,以下是我们如何使用 PySpark 在 Databricks Notebook 中执行此操作:
df = spark.read.format("csv").load("abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<path-to-data>")
希望这能有所帮助,你的帖子已经很老了,但在使用 abfss 之前我确实遇到了同样的问题......所以希望它能对其他人有所帮助。
关于python - 提供 blob 类型以从 PySpark 读取 Azure 追加 blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56800137/