问题描述
假设我有一个 Arrow::Array
(或 Dataframe
或 ChunkedArray
,不重要)并且我有一些谓词。我想计算一个新的 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;
}
解决方法
这听起来像您需要 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