在 Apache Arrow 中合并表
Merging Tables in Apache Arrow
我有两个 arrow:Table
,其中 table 1 是:
colA colB
1 2
3 4
和table 2是,
colC colD
i j
k l
其中 table 1 和 2 具有 相同 行数。我想并排加入他们
colA colB colC coldD
1 2 i j
3 4 k l
我正尝试按如下方式使用 arrow::ConcatenateTables
,但我的输出中出现了一堆空值(未显示)
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
仅进行 row-wise 连接。没有用于 column-wise 连接的内置辅助方法,但自己创建一个很容易(如果这不太正确,我深表歉意,我现在不在编译器面前):
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));
}
我有两个 arrow:Table
,其中 table 1 是:
colA colB
1 2
3 4
和table 2是,
colC colD
i j
k l
其中 table 1 和 2 具有 相同 行数。我想并排加入他们
colA colB colC coldD
1 2 i j
3 4 k l
我正尝试按如下方式使用 arrow::ConcatenateTables
,但我的输出中出现了一堆空值(未显示)
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
仅进行 row-wise 连接。没有用于 column-wise 连接的内置辅助方法,但自己创建一个很容易(如果这不太正确,我深表歉意,我现在不在编译器面前):
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));
}