Java Apache Arrow将数据从一个VectorSchemaRoot复制到另一个VectorSchemaRoot

fcg9iug3  于 2023-06-20  发布在  Java
关注(0)|答案(2)|浏览(157)

如果我有一个VectorSchemaRoot,它已经包含使用Java Apache Arrow库的数据,我该如何将这些数据复制到另一个VectorSchemaRoot

pokxtpni

pokxtpni1#

您最常见的做法是为源VectorSchemaRoot中的每个Vector创建一个TransferPair对象,以便将其缓冲区转移到第二个Vector中的新Vector。
但是,在这种情况下,您所拥有的并不是真正的“副本”,因为数据是从一个VSR传递到另一个VSR的,而不是复制的。这种方法的一个典型用例是在管道中使用VectorSchemaRoots,它们顺序处理数据。
如果你能多说一点你想完成的事情,我也许能提供一个更好的答案。

yrwegjxp

yrwegjxp2#

这就是我如何实现它。确保关闭originalRoot,否则将出现内存泄漏异常。此外,getAllocator()RootAllocator创建子分配器,即不要创建一个新的根-你会得到另一个例外,必须有相同的共享根。

private VectorSchemaRoot cloneRoot(VectorSchemaRoot originalRoot) {
    VectorSchemaRoot theRoot = VectorSchemaRoot.create(originalRoot.getSchema(), getAllocator());
    VectorLoader loader = new VectorLoader(theRoot);
    VectorUnloader unloader = new VectorUnloader(originalRoot);
    try (ArrowRecordBatch recordBatch = unloader.getRecordBatch()) {
      loader.load(recordBatch);
    }
    return theRoot;
  }

相关问题