Arrow 之 ArrayBuilder and Slice

ArrayBuilder and Slice UT
TEST(TestNestArrayPrototype, ListType) {
  auto nestype = std::make_shared<ListType>(list(arrow::int8()));
  auto nestarray = ArrayFromJSON(nestype, "[[[1, 2], [3, 4]], [[5, 6, 7], null, [8]], [[9, 10]]]");
  auto nestlistarr = std::static_pointer_cast<arrow::ListArray>(nestarray);
  std::cout << "nestlistarr->ToString():\n" <<  nestlistarr->ToString() << std::endl;

  std::unique_ptr<arrow::ArrayBuilder> numeric_builder;
  MakeBuilder(default_memory_pool(), arrow::int8(), &numeric_builder);
  auto child_builder = std::make_shared<arrow::ListBuilder>(default_memory_pool(), std::move(numeric_builder));
  auto nest_builder = std::make_shared<arrow::ListBuilder>(default_memory_pool(), std::move(child_builder));


  nest_builder->AppendArraySlice(*(nestlistarr->data().get()), 2, 1);
  nest_builder->AppendArraySlice(*(nestlistarr->data().get()), 0, 1);

  std::shared_ptr<arrow::Array> build_arr;
  nest_builder->Finish(&build_arr);
  std::cout << "build_arr->ToString():\n" <<  build_arr->ToString() << std::endl;

// 推荐的构造方式
// 一步到位, 直接构建基类ArrayBuilder
// 直接传递嵌套类型list(list(arrow::int8()), 不管多少层
  std::unique_ptr<arrow::ArrayBuilder> testnestbuilder;
  MakeBuilder(default_memory_pool(), list(list(arrow::int8())), &testnestbuilder);
  //Slice nestlistarr row 序号为2,行数为1的的数据
  // 指针用法也可以这样用 testnestbuilder->AppendArraySlice(*nestlistarr->data(), 2, 1);
  testnestbuilder->AppendArraySlice(*(nestlistarr->data().get()), 2, 1);
  testnestbuilder->AppendArraySlice(*(nestlistarr->data().get()), 0, 1);
  std::shared_ptr<arrow::Array> test_arr;
  testnestbuilder->Finish(&test_arr);
  std::cout << "test_arr->ToString()\n:" <<  test_arr->ToString() << std::endl;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值