首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache Arrow中的合并表

Apache Arrow中的合并表
EN

Stack Overflow用户
提问于 2022-02-19 08:30:20
回答 1查看 315关注 0票数 0

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

代码语言:javascript
复制
colA        colB
1           2
3           4

表2是,

代码语言:javascript
复制
colC        colD
i           j
k           l

其中,表1和表2的行数相同。我想和他们并肩作战

代码语言:javascript
复制
colA        colB        colC        coldD
1           2           i           j
3           4           k           l

我试图按如下方式使用arrow::ConcatenateTables,但输出中有一堆空值(未显示)

代码语言:javascript
复制
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);

如何获得预期的输出?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-20 14:15:45

arrow::ConcatenateTables只进行逐行级联。没有针对列级级联的内置辅助方法,但是很容易自己创建一个(如果这样做不完全正确,我现在还没有在编译器面前):

代码语言:javascript
复制
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));
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71183352

复制
相关文章

相似问题

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