Apache Arrow中的合并表



我有两个arrow:Table,其中表1是:

colA        colB
1           2
3           4

表2是

colC        colD
i           j
k           l

其中表1和表2都具有相同的行数。我想以的身份加入他们

colA        colB        colC        coldD
1           2           i           j
3           4           k           l

我尝试按如下方式使用arrow::ConcatenateTables,但在我的输出(未显示(中得到了一堆null

t1 = ... \ std::shared_ptr<arrow::Table>
t2 = ... \ std::shared_ptr<arrow::Table>
arrow::ConcatenateTablesOptions options;
options.unify_schemas = true;
options.field_merge_options.promote_nullability = true;
auto merged = arrow::ConcatenateTables({t1, t2}, options);

如何获得预期输出?

arrow::ConcatenateTables只执行行串联。没有用于逐列串联的内置助手方法,但自己创建一个方法很容易(如果这不太正确,很抱歉,我现在不在编译器面前(:

std::shared_ptr<arrow::Table> CombineTables(const Table& left, const Table& right) {
std::vector<std::shared_ptr<arrow::ChunkedArray>> columns = left.columns();
const std::vector<std::shared_ptr<arrow::ChunkedArray>>& right_columns = right.columns();
columns.insert(columns.end(), right_columns.begin(), right_columns.end());
std::vector<std::shared_ptr<arrow::Field>> fields = left.fields();
const std::vector<std::shared_ptr<arrow::Field>>& right_fields = right.fields();
fields.insert(fields.end(), right_fields.begin(), right_fields.end());
return arrow::Table::Make(arrow::schema(std::move(fields)), std::move(columns));
}

最新更新