如何不使用Spark直接从Azure Data Lake读取parquet文件
无需Spark直接读取Azure Data Lake Parquet文件的Python方案
前置依赖
首先安装需要的Python库:pip install pandas dask adlfs azure-identity pyarrow
- adlfs:基于fsspec实现的Azure Data Lake文件系统适配层,支持直接通过协议路径访问ADLS文件
- pyarrow:Parquet文件的解析引擎
- azure-identity:Azure身份认证工具,支持多种认证方式
身份认证配置
可以根据使用场景选择任意一种认证方式:
- 测试场景:直接使用存储账户的访问密钥,配置最简单
- 本地开发场景:本地安装Azure CLI后执行
az login登录,代码无需额外配置密钥 - 生产自动化场景:使用Azure AD服务主体进行认证,权限管控更安全
读取为Pandas DataFrame
单个Parquet文件读取
import pandas as pd from adlfs import AzureBlobFileSystem # 初始化ADLS Gen2文件系统实例 fs = AzureBlobFileSystem( account_name="替换为你的存储账户名", account_key="替换为你的存储账户访问密钥" # 若使用Azure CLI认证,删除account_key参数即可 ) # 直接读取文件内容到DataFrame,无本地文件落盘 with fs.open("替换为你的容器名/文件存放路径/xxx.parquet", "rb") as f: pd_df = pd.read_parquet(f)
批量读取同目录下所有Parquet文件
pd_df = pd.read_parquet( "abfs://替换为你的容器名/文件存放目录路径/", storage_options={ "account_name": "替换为你的存储账户名", "account_key": "替换为你的存储账户访问密钥" } )
读取为Dask DataFrame
Dask原生支持通过storage_options参数配置对象存储访问,代码更简洁:
import dask.dataframe as dd dask_df = dd.read_parquet( "abfs://替换为你的容器名/文件存放目录路径/*.parquet", storage_options={ "account_name": "替换为你的存储账户名", "account_key": "替换为你的存储账户访问密钥" } ) # 需要触发计算时调用compute方法转为Pandas DataFrame # pd_df = dask_df.compute()
补充说明:如果你使用的是较早的ADLS Gen1存储,将路径协议替换为adl://,同时额外安装azure-datalake-store库即可使用相同逻辑读取
内容的提问来源于stack exchange,提问作者Rebe
相关产品推荐
相关产品推荐

