我有一个来自等离子DataStore的RecordBatch,我可以将它读入pyarrow.RecordBatch或pyarrow.Table。我现在正在尝试在将其转换为pandas (to_pandas)之前过滤掉行。
有没有办法在pyarrow.Table上使用新的Dataset API (可以在ParquetDataset上使用)中的filter方法?这将允许我使用这样的过滤器:
[[('date', '=', '2020-01-01')]]
看一下源代码,pyarrow.Table和pyarrow.RecordBatch似乎都有一个过滤函数,但至少RecordBatch需要一个布尔掩码。
这个是可能的吗?原因是数据集包含许多字符串(和/或类别),这些字符串(和/或类别)不是零拷贝的,因此运行to_pandas实际上会引入显著的延迟,而我每次只查找数据集的大约20%。
致以敬意,
尼克拉斯
发布于 2021-04-08 21:59:33
现在,这是可能的:
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'))发布于 2022-03-04 10:19:16
上面的问题相当于
WHERE date = '2020-01-01'值得一提的是,可用于在https://arrow.apache.org/docs/python/api/compute.html#containment-tests上提供更广泛选择条件的PyArrow函数的范围
# import pyarrow.compute as pc
# WHERE test_table.name LIKE 'T%'
filtered_table = test_table.filter(pc.match_like(test_table["name"],"T%"))当筛选器返回表结构时,您可以一个接一个地链接筛选器。
# 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")
)https://stackoverflow.com/questions/62430288
复制相似问题