有没有办法过滤掉 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;
}

解决方法

这听起来像您需要 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...