Как вернуть StructArray из нескольких скалярных функций

#c #apache-arrow

#c #апач-стрела

Вопрос:

У меня есть сценарий, в котором я работаю с временными данными в Apache Arrow и использую вычислительные функции для извлечения компонентов даты/времени, например:

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

Пока это работает, я должен управлять тремя отдельными данными. В идеале я хотел бы иметь одну функцию, которая возвращает StructArray элементы, содержащие год/месяц/день, которые также могут масштабироваться до более подробных компонентов времени. Существует ли простой способ регистрации такой функции в текущем API?

Ответ №1:

Существует ли простой способ регистрации такой функции в текущем API?

Я так не думаю, ваш вариант использования выглядит слишком специфичным. С другой стороны, если вы делаете это часто, вы можете реализовать что-то, что сделает это за вас:

  std::shared_ptrlt;arrow::Arraygt; CallFunctions(std::vectorlt;std::stringgt; constamp; functions,  std::vectorlt;arrow::Datumgt; constamp; args) {   std::vectorlt;std::shared_ptrlt;arrow::Arraygt;gt; results;  for (std::string constamp; 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});  }