使用PyArrow过滤读取Parquet数据集时触发ValueError异常
问题解决:PyArrow ParquetDataset过滤器格式错误修正
你的代码存在三个关键问题,导致了ValueError: not enough values to unpack (expected 3, got 1)错误:
- 参数传递语法错误:你用括号包裹了关键字参数(比如
(use_legacy_dataset = False)),这不符合Python函数传参规则,应直接传递关键字参数,无需额外括号。 - Filters格式错误:PyArrow的
filters参数要求用嵌套列表表示逻辑关系,而非元组嵌套。原查询逻辑是(A OR B) AND (C OR D),对应filters的格式为:外层列表的元素是AND连接的组,每个组用子列表包裹OR条件。 - 拼写错误:
parquit_file应修正为parquet_file(拼写遗漏了一个'e')。
修正后的代码
import pyarrow.parquet as pq # 修正文件名拼写 dataset = pq.ParquetDataset( parquet_file, use_legacy_dataset=False, filters=[ # 第一组:salary == 150280.17 OR country == "Finland"(OR条件放在同一个子列表) [("salary", "==", 150280.17), ("country", "==", "Finland")], # 第二组:first_name == "Amanda" OR last_name == "Gray"(与第一组是AND关系) [("first_name", "==", "Amanda"), ("last_name", "==", "Gray")] ] ) df = dataset.read().to_pandas()
PyArrow Filters格式规则说明
- AND关系:外层列表中的每个元素(单个三元组或子列表)彼此为AND连接。
- OR关系:将多个OR条件放在同一个子列表中,子列表内的三元组彼此为OR连接。
- 单个条件:直接使用
[(列名, 操作符, 值)]的格式即可。
内容的提问来源于stack exchange,提问作者Subrat Kumar Sahoo
相关产品推荐
相关产品推荐

