不稳定的 scan_pyarrow_dataset() 的替代方案?

问题描述 投票:0回答:1

我们对 Polars 和 pyarrow 很陌生,我们正在尝试使用 .csv(可能还有其他)文件格式的 pyarrow Dataset。我们使用 pyarrow 来创建数据集,因为它支持 .csv 文件的分区,而我相信 polars.scan_csv() 不支持。 scan_pyarrow_dataset()工作正常(我们使用的是极地1.9.0),但由于警告here

,我们担心依赖此函数

此功能被认为不稳定。可能随时更改 点而不被视为重大更改。

我们的问题:为什么会出现此警告,是否有另一种方法可以递归扫描目录以查找已分区的 .csv 文件?有人建议我们使用 pyarrow.dataset.Dataset.to_table(),但它将整个数据集读取到内存中。谢谢!

python python-polars pyarrow
1个回答
0
投票

如果您想避免具体化整个数据集(如 pyarrow.dataset.Dataset.to_table() 所做的那样),您可以使用 to_batches() 方法批量迭代数据集。

为了使这项工作达到最佳效果,我认为您希望 PyArrow 应用任何利用数据集中的分区键的过滤器,然后使用 Polars 的 from-arrow() 将剩余部分传递给 Polars。

这是一个使用 nyc-taxi 数据集 的示例,该数据集按 (1) 年和 (2) 月进行分区。我们注意到 Dataset 对象被过滤,因此必须从磁盘读取尽可能少的数据:

import polars as pl
import pyarrow.dataset as ds
import pyarrow.compute as pc

taxi = ds.dataset("nyc-taxi", partitioning="hive")

for batch in taxi.filter((pc.field("year") == 2019) & (pc.field("month") == 1)).to_batches():
    df = pl.from_arrow(batch)

    # Do the work you want to do with Polars. Here we just print:
    print(df.filter(pl.col("tip_amount") > 0.2 * pl.col("total_amount")))
© www.soinside.com 2019 - 2024. All rights reserved.