Pyspark:从Blob存储空间加载zip文件

时间:2020-04-21 15:19:33

标签: python azure pyspark databricks

我正在使用Pyspark尝试从Blob存储中读取一个zip文件。加载后,我想解压缩文件,然后将解压缩的CSV写回到Blob存储。

我正在遵循此指南,该指南说明了一旦阅读后如何解压缩文件:https://docs.databricks.com/_static/notebooks/zip-files-python.html

但这并不能解释我如何从blob中读取zip。我有以下代码

file_location = "path_to_my.zip"
df = sqlContext.read.format("file_location").load

我希望这能将zip以df的形式加载到databrick,然后从那里我可以按照文章的建议来解压缩,将csvs加载到数据帧,然后再将数据帧写回到blob。

关于如何使用pyspark最初从blob读取zip文件的任何想法?

谢谢

1 个答案:

答案 0 :(得分:0)

如DataBricks笔记本的第一个单元格所示,您需要下载zip文件并以某种方式解压缩。您的情况有所不同,因为您使用的是Azure Blob存储,并且想用Python进行所有操作(没有其他Shell应用程序)。

This page介绍了访问Azure Blob存储中文件的过程。您需要按照以下步骤操作:

  1. Install软件包azure-storage-blob
  2. 导入SDK模块并设置必要的凭据(reference)。
  3. 使用连接字符串创建BlobServiceClient的实例:
# Create the BlobServiceClient object which will be used to create a container client
blob_service_client = BlobServiceClient.from_connection_string(connect_str)
  1. 为所需文件创建BlobClient的实例:
blob_client = blob_service_client.get_blob_client(container="container", blob="path_to_my.zip")
  1. Download the blob(压缩文件),并用gzip解压缩。我会这样写:
from pathlib import Path
import gzip

Path("./my/local/filepath.csv").write_bytes(
    gzip.decompress(blob_client.download_blob().readall())
)
  1. 使用"./my/local/filepath.csv"创建数据框。