如何使用PyArrow在Python中读取满足title='Learn Python'的Parquet文件
在read_pyarrow中添加title筛选条件的方案
嘿,刚好做过类似的POC,给你两种常见场景的实现方法,都是利用谓词下推来高效筛选,不用全量加载数据:
场景1:用pandas + pyarrow引擎读取
如果你的代码是基于pandas的read_parquet并指定engine='pyarrow',直接用filters参数就能搞定,参数格式是[(列名, 操作符, 目标值)]:
import pandas as pd # 读取时直接筛选title='Learn Python'的数据 filtered_df = pd.read_parquet( "你的_parquet文件路径.parquet", engine="pyarrow", filters=[("title", "=", "Learn Python")] )
这个filters参数会让pyarrow在读取阶段就过滤掉不符合条件的数据块,比先全读再用df[df['title'] == 'Learn Python']高效太多,尤其是大文件场景。
场景2:直接用pyarrow原生API读取
如果你的POC是直接用pyarrow的read_table方法(很多时候测试原生性能会这么做),需要用pyarrow的计算表达式来构建筛选条件,传递给filter参数(注意这里是单数):
import pyarrow.parquet as pq import pyarrow.compute as pc # 构建筛选表达式:匹配title等于'Learn Python'的行 filter_condition = pc.equal(pc.field("title"), "Learn Python") # 读取符合条件的数据表 filtered_table = pq.read_table( "你的_parquet文件路径.parquet", filter=filter_condition ) # 转成DataFrame(如果需要的话) filtered_df = filtered_table.to_pandas()
小提示
- 确保你的pyarrow版本不低于0.17.0,老版本对筛选参数的支持不全。
- Parquet文件默认会生成列统计信息,这是谓词下推高效运行的前提,如果你的文件是自己生成的,一般不用额外配置。
内容的提问来源于stack exchange,提问作者SSingh
相关产品推荐
相关产品推荐

