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

如何从Azure Blob Storage中获取DataFrame的部分数据?

解决方案

1. 使用Parquet格式(推荐)

Parquet是列式存储格式,天生支持仅读取指定列,且压缩率高,能大幅减少传输量。Azure Blob可通过文件系统接口直接访问Parquet文件,无需下载完整文件。

实现步骤:

  • 将现有pandas DataFrame导出为Parquet格式后上传到Blob:
    import pandas as pd
    df.to_parquet("case_data.parquet")
    # 上传到Azure Blob的代码(可使用azure-storage-blob库实现,此处略)
    
  • 远程读取指定列:
    结合adlfs(Azure Data Lake File System)或直接通过pandas的fsspec支持读取:
    import pandas as pd
    from adlfs import AzureBlobFileSystem
    
    fs = AzureBlobFileSystem(account_name="<你的存储账户名>", account_key="<你的存储密钥>")
    # 仅读取需要的列
    df_partial = pd.read_parquet(
        "abfs://<容器名>/case_data.parquet",
        columns=["col1", "col3", "col5"],
        filesystem=fs
    )
    

优缺点:

  • 优点:列式存储天然适配列级读取,压缩率高,性能优异,pandas生态支持完善。
  • 缺点:需要将现有HDF5文件转换为Parquet格式,存在一次性转换成本。

2. 基于HDF5的远程部分读取(无需全量下载)

你之前的误解是HDF5必须全量下载,实际上可以通过虚拟文件系统(VFS)将Azure Blob挂载为本地可访问的文件系统,直接远程读取HDF5的指定列。

实现步骤:

使用h5py结合fsspec的AzureBlobFileSystem:

import h5py
import pandas as pd
from fsspec.implementations.azure import AzureBlobFileSystem

# 初始化Blob文件系统
fs = AzureBlobFileSystem(account_name="<你的存储账户名>", account_key="<你的存储密钥>")
# 打开远程HDF5文件
with h5py.File(fs.open("<容器名>/case_data.h5"), "r") as f:
    # 读取指定列的数据(假设数据集路径为/path/to/dataset)
    col_data = f["/path/to/dataset"][:, ["col1", "col3"]]
    # 转换为pandas DataFrame
    df_partial = pd.DataFrame(col_data)

优缺点:

  • 优点:无需转换现有HDF5文件,保留原有文件结构。
  • 缺点:HDF5的虚拟文件系统配置略繁琐,且Parquet在列读取性能和压缩率上更优。

3. Azure Blob范围读取+分块解析(无格式转换)

如果不想修改现有文件格式,可以利用Azure Blob的范围读取API,仅下载文件的部分字节,再结合pandas的分块读取逻辑。不过这种方式更适合按行读取,按列读取需要提前了解文件的结构偏移,实现复杂度较高。

实现示例(按行分块):

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

blob_client = BlobClient.from_connection_string("<你的连接字符串>", container_name="<容器名>", blob_name="case_data.h5")
# 下载部分字节(示例:前10MB)
stream = blob_client.download_blob(offset=0, length=10*1024*1024)
# 分块读取DataFrame
df_partial = pd.read_hdf(stream, chunksize=1000).get_chunk()

优缺点:

  • 优点:无需转换文件格式。
  • 缺点:按列读取需要解析HDF5的内部结构,实现复杂,性能不如列式存储方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:09:26