如何 return 来自多个标量函数的 StructArray

How to return a StructArray from Multiple Scalar Functions

我有一个场景,我在 Apache Arrow 中处理时态数据并使用计算函数提取 date/time 组件,如下所示:

auto year = arrow::compute::CallFunction("year", {array});
auto month = arrow::compute::CallFunction("month", {array});
auto day = arrow::compute::CallFunction("day", {array});
...

虽然这可行,但我必须管理三个独立的基准面。理想情况下,我希望有一个 returns 包含 year/month/day 元素的 StructArray 函数,它还可以扩展到更详细的时间组件。有没有一种简单的方法可以用当前的 API?

注册这样的函数

Is there a simply way of registering such a function with the current API?

我不这么认为,你的用例看起来太具体了。另一方面,如果你经常这样做,你可以实现一些可以为你做的事情:


std::shared_ptr<arrow::Array> CallFunctions(std::vector<std::string> const& functions,
                                            std::vector<arrow::Datum> const& args) {

  std::vector<std::shared_ptr<arrow::Array>> results;
  for (std::string const& function : functions) {
    results.push_back(arrow::compute::CallFunction(function, args).ValueOrDie().make_array());
  }
  return arrow::StructArray::Make(results, functions).ValueOrDie();
}

void test()  {
   auto array = ....
   auto structArray = CallFunctions({"year", "month", "day"}, {array});

}