我们对 Polars 和 pyarrow 很陌生,我们正在尝试使用 .csv(可能还有其他)文件格式的 pyarrow Dataset。我们使用 pyarrow 来创建数据集,因为它支持 .csv 文件的分区,而我相信 polars.scan_csv() 不支持。 scan_pyarrow_dataset()工作正常(我们使用的是极地1.9.0),但由于警告here:
,我们担心依赖此函数此功能被认为不稳定。可能随时更改 点而不被视为重大更改。
我们的问题:为什么会出现此警告,是否有另一种方法可以递归扫描目录以查找已分区的 .csv 文件?有人建议我们使用 pyarrow.dataset.Dataset.to_table(),但它将整个数据集读取到内存中。谢谢!
如果您想避免具体化整个数据集(如 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")))