You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python3 Jupyter Notebook中读写Azure Blob存储的Parquet文件?

在Jupyter Notebook(Python3)中读写Azure Blob存储的Parquet文件

我来帮你解决这个问题——你遇到的编码错误本质是因为Parquet是二进制格式的文件,而get_blob_to_text()是专门用来读取文本类文件的,直接用它处理Parquet肯定会触发解码失败。下面给你一套完整的、经过验证的实现方案,包含读取和写入两种场景,同时推荐使用Azure存储SDK的最新版本(旧版BlockBlobService已被弃用)。

准备工作:安装依赖库

首先确保你的环境里安装了必要的包,在Jupyter的单元格里运行:

!pip install azure-storage-blob pandas pyarrow
  • azure-storage-blob:Azure Blob存储的官方SDK(最新版)
  • pandas:用来处理Parquet数据的常用工具
  • pyarrow:Parquet格式的底层处理引擎(也可以用fastparquet,二选一即可)

方案1:使用pandas + Azure Blob SDK(推荐)

读取Parquet文件到DataFrame

from azure.storage.blob import BlobServiceClient
import pandas as pd

# 初始化Blob服务客户端
connect_str = "DefaultEndpointsProtocol=https;AccountName=testdata;AccountKey=key-here;EndpointSuffix=core.windows.net"
blob_service_client = BlobServiceClient.from_connection_string(connect_str)

# 获取目标Blob的客户端
container_name = "mycontainer"
blob_name = "testdata.parquet"
blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)

# 下载Blob的二进制流,直接用pandas读取成DataFrame
with blob_client.download_blob() as blob_stream:
    df = pd.read_parquet(blob_stream)

# 查看数据
df.head()

将DataFrame写入Azure Blob为Parquet文件

from azure.storage.blob import BlobServiceClient
import pandas as pd
from io import BytesIO

# 假设你已经有一个要写入的DataFrame
df = pd.DataFrame({"col1": [1, 2, 3], "col2": ["a", "b", "c"]})

# 初始化Blob服务客户端
connect_str = "DefaultEndpointsProtocol=https;AccountName=testdata;AccountKey=key-here;EndpointSuffix=core.windows.net"
blob_service_client = BlobServiceClient.from_connection_string(connect_str)

# 获取目标Blob的客户端
container_name = "mycontainer"
blob_name = "output_data.parquet"
blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)

# 将DataFrame写入BytesIO二进制流
parquet_stream = BytesIO()
df.to_parquet(parquet_stream, engine="pyarrow")
parquet_stream.seek(0)  # 重置流的指针到开头

# 上传流到Azure Blob
blob_client.upload_blob(parquet_stream, overwrite=True)

方案2:使用pyarrow直接操作Azure Blob存储

如果你需要更底层的控制,可以用pyarrow的Azure文件系统集成:

import pyarrow.fs
import pyarrow.parquet as pq

# 初始化Azure文件系统
fs = pyarrow.fs.AzureFileSystem(
    account_name="testdata",
    account_key="key-here",
    protocol="https"
)

# 读取Parquet文件
dataset = pq.ParquetDataset("mycontainer/testdata.parquet", filesystem=fs)
df = dataset.read_pandas().to_pandas()

# 写入Parquet文件
table = pyarrow.Table.from_pandas(df)
pq.write_table(table, "mycontainer/output_data.parquet", filesystem=fs)

为什么你的原代码会报错?

你之前用的get_blob_to_text()方法会尝试把Blob的二进制内容按照默认编码(通常是UTF-8)解码成文本,但Parquet是二进制序列化格式,根本不是文本数据,所以必然会抛出编码相关的错误。必须用二进制流的方式来处理Parquet文件。

内容的提问来源于stack exchange,提问作者user1814008

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:41:20