首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyArrow表:筛选行

PyArrow表:筛选行
EN

Stack Overflow用户
提问于 2020-06-17 21:32:41
回答 2查看 852关注 0票数 2

我有一个来自等离子DataStore的RecordBatch,我可以将它读入pyarrow.RecordBatchpyarrow.Table。我现在正在尝试在将其转换为pandas (to_pandas)之前过滤掉行。

有没有办法在pyarrow.Table上使用新的Dataset API (可以在ParquetDataset上使用)中的filter方法?这将允许我使用这样的过滤器:

[[('date', '=', '2020-01-01')]]

看一下源代码,pyarrow.Tablepyarrow.RecordBatch似乎都有一个过滤函数,但至少RecordBatch需要一个布尔掩码。

这个是可能的吗?原因是数据集包含许多字符串(和/或类别),这些字符串(和/或类别)不是零拷贝的,因此运行to_pandas实际上会引入显著的延迟,而我每次只查找数据集的大约20%。

致以敬意,

尼克拉斯

EN

回答 2

Stack Overflow用户

发布于 2021-04-08 21:59:33

现在,这是可能的:

代码语言:javascript
复制
import pyarrow as pa

my_table = pa.Table.from_arrays(
    [pa.array(['foo', 'bar', 'foo'], pa.string())],
    names=['col1']
)

filtered_table = my_table.filter(pa.compute.equal(my_table['col1'], 'foo'))
票数 4
EN

Stack Overflow用户

发布于 2022-03-04 10:19:16

上面的问题相当于

代码语言:javascript
复制
WHERE date = '2020-01-01'

值得一提的是,可用于在https://arrow.apache.org/docs/python/api/compute.html#containment-tests上提供更广泛选择条件的PyArrow函数的范围

代码语言:javascript
复制
# import pyarrow.compute  as pc 
# WHERE test_table.name LIKE 'T%'
filtered_table = test_table.filter(pc.match_like(test_table["name"],"T%"))

当筛选器返回表结构时,您可以一个接一个地链接筛选器。

代码语言:javascript
复制
# WHERE test_table.name LIKE 'T%' AND test_table.date_updated = '2020-01-01'
filtered_table = test_table.filter(
    pc.match_like(test_table["name"],"T%")
).(
    pc.equal(test_table["date_updated"], "2020-01-01")
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62430288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档