有没有办法从 Arrow::Array 和一些谓词中过滤掉?
Is there a way to get filter out of Arrow::Array and some predicate?
假设我有一个 Arrow::Array
(或 Dataframe
或 ChunkedArray
,不重要)并且我有一些谓词。我想计算一个新的 Arrow::BooleanArray
,它只存储应用于每个数组元素的谓词结果。
我的情况是我有两个 date32
的排序数组,我想 return 一个掩码,它告诉我第一个数组的值是否存在于第二个数组中。像下面这样:
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
假设我有一个 Arrow::Array
(或 Dataframe
或 ChunkedArray
,不重要)并且我有一些谓词。我想计算一个新的 Arrow::BooleanArray
,它只存储应用于每个数组元素的谓词结果。
我的情况是我有两个 date32
的排序数组,我想 return 一个掩码,它告诉我第一个数组的值是否存在于第二个数组中。像下面这样:
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