首页 > 解决方案 > 有没有办法过滤掉 Arrow::Array 和一些谓词?

问题描述

假设我有一个Arrow::Array(或DataframeChunkedArray,不重要)并且我有一些谓词。我想计算一个新的Arrow::BooleanArray,它只存储应用于每个数组元素的这个谓词的结果。

我的情况是我有两个排序数组,date32我想返回一个掩码,它告诉我第一个数组的值是否存在于第二个数组中。如下所示:

std::shared_ptr<arrow::BooleanArray> getDatesMask(
    const std::shared_ptr<arrow::Array>& lhs,
    const std::shared_ptr<arrow::Array>& lhs) 
{
   // some pseudo code how this could work
   // for date in lhs:
   //     res.Append(date in rhs);
   // return res;
}

标签: c++apache-arrow

解决方案


这听起来像你需要is_in计算功能:

std::shared_ptr<arrow::BooleanArray> getDatesMask(
    const std::shared_ptr<arrow::Array>& haystack,
    const std::shared_ptr<arrow::Array>& 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


推荐阅读