#c #apache-arrow
#c #apache-стрелка
Вопрос:
Предположим, что у меня есть Arrow::Array
(или Dataframe
или ChunkedArray
, не важно) и у меня есть некоторый предикат. Я хочу вычислить новый Arrow::BooleanArray
, который просто хранит результат этого предиката, применяемого к каждому элементу массива.
Мой случай заключается в том, что у меня есть два отсортированных массива date32
, и я хочу вернуть маску, которая сообщает мне, присутствует ли значение первого массива во втором. Например, следующее:
std::shared_ptr<arrow::BooleanArray> getDatesMask(
const std::shared_ptr<arrow::Array>amp; lhs,
const std::shared_ptr<arrow::Array>amp; lhs)
{
// some pseudo code how this could work
// for date in lhs:
// res.Append(date in rhs);
// return res;
}
Комментарии:
1. Не точное совпадение, но будет ли полезен set_difference в алгоритме?
2. set_difference . Обратите внимание, что есть также
std::set_intersection
и другиеstd::set_
связанные с алгоритмом функции.
Ответ №1:
Похоже, вам нужна функция is_in
вычисления:
std::shared_ptr<arrow::BooleanArray> getDatesMask(
const std::shared_ptr<arrow::Array>amp; haystack,
const std::shared_ptr<arrow::Array>amp; needles)
{
arrow::Datum mask = arrow::compute::IsIn(haystack, needles).ValueOrDie();
return std::static_pointer_cast<arrow::BooleanArray>(mask.make_array());
}
Документация is_in
(и другие вычислительные функции) по адресу: https://arrow.apache.org/docs/cpp/compute.html#containment-tests
Комментарии:
1. Это работает, единственный комментарий заключается в том, что нужно добавить
#include <arrow/compute/api_scalar.h>