【问题标题】:Can pyarrow filter parquet struct and list columns?pyarrow 可以过滤镶木地板结构并列出列吗?
【发布时间】:2021-08-25 21:11:52
【问题描述】:

将通过 pyarrow 存储的下表放入 Apache Parquet:

id regions
0 A ['us', 'uk']
1 B ['uk', 'mx']

我想在加载数据时通过 parquet 过滤区域列。像这样的:

import pyarrow.dataset as ds
dataset = ds.dataset("./example.parquet", format="parquet")
dataset.to_table(filter=ds.scalar('us').isin(ds.field('region')))

期望我会回到第一行,而不是第二行。

但是,这不起作用。文档没有关于如何执行此类操作的任何有用信息。有没有办法对更复杂的列类型执行过滤器?

【问题讨论】:

    标签: parquet pyarrow apache-arrow


    【解决方案1】:

    据我从documentation 得知,你不能那样做。

    支持的操作有<<===>=>以及isin

    我认为你想要的是 contains,这是不受支持的。

    箭头可以自己实现,但是有点麻烦:

    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_indices)
        return compute.take(table, equal_table_indices)
    
    
    filter_list_column(table, "regions", "us")
    

    这给了你:

    id regions
    0 A ['us' 'uk']

    【讨论】:

      猜你喜欢
      • 2021-08-27
      • 2021-08-09
      • 1970-01-01
      • 2021-05-29
      • 2021-01-10
      • 2023-03-19
      • 2022-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多