多种条件的pyarrow数据集过滤

时间:2020-08-06 22:00:05

标签: python parquet pyarrow

我有一个分区的镶木地板数据集,我试图将其读入pandas数据框。完整的镶木地板数据集无法容纳到内存中,因此我只需要选择一些分区(分区列为Year,Month和Date。我有以下内容:

pd.read_parquet(
    path_to_dataset,
    filters=[("Date", ">=", "20200715"), ("Date", "<=", "2020804")]
)

运行此命令时,出现内存错误/ python程序崩溃。但是,当我运行以下命令时,即使从理论上讲它也将返回完全相同的数据量(我的数据集在第4个位置停止),但它没有问题。

pd.read_parquet(
    path_to_dataset,
    filters=[("Date", ">=", "20200715")]
)

似乎第二个过滤器("Date", "<=", "2020804")优先于第一个过滤器,而不被视为复合表达式。在我当前的用例中,我可以删除第二个过滤器,但是我还有其他一些地方,其数据将更多地位于总范围的中间,如果没有第二个过滤器,最终我将再次读取过多的数据。

我没有运气就尝试过以下各项。

(("Date", ">=", "20200715") & ("Date", "<=", "2020804"))
("Date", ">=", "20200715", "Date", "<=", "2020804")

是否可以在同一分区/列上处理复合表达式?

参考文档在这里: https://arrow.apache.org/docs/python/dataset.html

1 个答案:

答案 0 :(得分:3)

“ 2020804”似乎不是有效日期,您缺少零。