是否可以根据时间边界而不是记录数在 Apache Arrow 中定义记录批次?

Is it possible to define record batches in Apache Arrow based on time bounaries instead of number of records?

阅读 Apache Arrow,我遇到了记录批处理的概念,顾名思义,它对多条记录进行批处理以启用流处理。即:按批次处理记录,而不必接收整个流。

我看到的示例为每 X 条记录创建一个新的记录批次。是否也可以通过其他标准创建记录批次?具体来说,我想在同一记录批次中对同一小时的记录进行分组。换句话说:允许通过一些可配置的时间边界创建记录批次。

这可能吗?

记录批次是一组列,其中每列的长度相同。您可以使用您想要的任何标准将 table(或记录批次)分成更小的批次。

我不确定您是在构建批次还是将现有的 table/batch 分成更小的批次。

目前您必须自己进行分组。这是一个使用 Pandas 获取具有随机日期的数据框并将其转换为 table 的示例,其中每个月都有自己的记录批次。

import numpy as np
import pandas as pd
import pyarrow as pa

def random_dates(start, end, n):

    start_u = start.value//10**9
    end_u = end.value//10**9

    return pd.to_datetime(np.random.randint(start_u, end_u, n), unit='s')

start = pd.to_datetime('2015-01-01')
end = pd.to_datetime('2018-01-01')
dates = random_dates(start, end, 10000)

df = pd.DataFrame({'dates': dates})
sub_dfs = [sub_df for _, sub_df in df.groupby(pd.Grouper(key='dates', freq='M'))]
tables = [pa.Table.from_pandas(sub_df) for sub_df in sub_dfs]
batches = [batch for table in tables for batch in table.to_batches()]
table = pa.Table.from_batches(batches)

正在 group_by compute function inside pyarrow as part of https://issues.apache.org/jira/browse/ARROW-11591 上完成工作。完成后,您将能够使用 pyarrow 表达式来分区 table 而不是 pandas.