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

如何从Azure Blob存储读取Parquet文件的指定列/行?

解决方案

当然可以只读取Parquet文件的部分列或行,Polars本身就支持这类按需读取的功能,结合Azure Blob存储的特性还能进一步优化性能,下面是具体实现方式:

一、读取部分列

Polars的pl.read_parquet()方法提供了columns参数,直接传入需要的列名列表即可,即使是从io.BytesIO读取文件,也只会解析并加载指定列的数据:

import polars as pl
from io import BytesIO
from azure.storage.blob import BlobClient

# 初始化Blob客户端
blob_client = BlobClient.from_connection_string(
    "你的Azure存储连接字符串",
    container_name="目标容器名",
    blob_name="大型Parquet文件名.parquet"
)

# 下载Blob数据到BytesIO
blob_data = BytesIO(blob_client.download_blob().readall())

# 仅读取指定列
df = pl.read_parquet(blob_data, columns=["列名1", "列名2", "列名3"])

如果想进一步优化(避免下载整个文件),可以结合PyArrow的ParquetFile和Azure Blob的流式读取,利用Parquet的列存储特性,只读取目标列对应的字节范围:

import polars as pl
import pyarrow.parquet as pq
from azure.storage.blob import BlobClient

blob_client = BlobClient.from_connection_string(
    "你的Azure存储连接字符串",
    container_name="目标容器名",
    blob_name="大型Parquet文件名.parquet"
)

# 获取Blob的流式数据
blob_stream = blob_client.download_blob().chunks()

# 用PyArrow打开Parquet文件,仅读取指定列
parquet_file = pq.ParquetFile(blob_stream)
arrow_table = parquet_file.read(columns=["列名1", "列名2"])

# 转换为Polars DataFrame
df = pl.from_arrow(arrow_table)

二、读取部分行

1. 读取前N行/跳过前N行

使用n_rows参数指定读取的行数,skip_rows参数指定跳过的行数:

# 读取前100行
df = pl.read_parquet(blob_data, n_rows=100)

# 跳过前50行,读取接下来的200行
df = pl.read_parquet(blob_data, skip_rows=50, n_rows=200)

2. 条件过滤行(下推优化)

如果Parquet文件包含统计信息,Polars支持将过滤条件下推到读取阶段,减少需要加载的数据量,使用filter参数即可:

# 仅读取"列名1"大于100的行
df = pl.read_parquet(blob_data, filter=pl.col("列名1") > 100)

同样,上述行读取的逻辑也可以结合PyArrow的流式读取方式,避免下载整个文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:03:18