将下表通过pyarrow存储到ApacheParquet中:
我想在加载数据时通过parquet过滤区域列。类似于这样:
import pyarrow.dataset as ds
dataset = ds.dataset("./example.parquet", format="parquet")
dataset.to_table(filter=ds.scalar('us').isin(ds.field('region')))
期望是我能回到第一排,但不是第二排。
但是,这不起作用。留档没有关于如何执行这种操作的任何有用信息。有没有办法对更复杂的列类型执行过滤器?
据我所知,从留档来看,你不能这么做。
支持的操作是
我认为你想要的是包含不支持的
。
您可以自己在箭头中实现它,但这有点麻烦:
import typing
import pandas as pd
import pyarrow as pa
from pyarrow import compute
def filter_list_column(table: pa.Table, column: str, value: typing.Any) -> pa.Table:
flat_list = compute.list_flatten(table[column])
flat_list_indices = compute.list_parent_indices(table[column])
equal_mask = compute.equal(flat_list, value)
equal_table_indices = compute.filter(flat_list_indices, equal_mask)
return compute.take(table, equal_table_indices)
filter_list_column(table, "regions", "us")
这给了你: