目前Apache Arrow支持的算子包括:Filter算子、复杂表达式运算,sort算子、join,聚合算子等。
1.Filter算子
equal(Expression lhs, Expression rhs); | 等于 |
not_equal(Expression lhs, Expression rhs); | 不等于 |
less(Expression lhs, Expression rhs); | 小于 |
less_equal(Expression lhs, Expression rhs); | 小于等于 |
greater(Expression lhs, Expression rhs); | 大于 |
greater_equal(Expression lhs, Expression rhs); | 大于等于 |
is_null(Expression lhs, bool nan_is_null = false); | 是否为空 |
is_valid(Expression lhs); | 是否有效 |
and_(Expression lhs, Expression rhs); | 逻辑与(两个条件) |
and_(const std::vector<Expression>&); | 逻辑与(多个条件) |
or_(Expression lhs, Expression rhs); | 逻辑或(两个条件) |
or_(const std::vector<Expression>&); | 逻辑或(多个条件) |
not_(Expression operand); | 逻辑非 |
示例:
1.scan_builder->Filter(cp::greater(cp::field_ref("b"), cp::literal(6)));//过滤算子 b列大于6
2.std::vector<cp::Expression> exprs; //过滤算子 (a > 6 && b < 4)
exprs.push_back(cp::less(cp::field_ref("b"), cp::literal(4)));
exprs.push_back(cp::equal(cp::field_ref("a"), cp::literal(6)));
std::vector<cp::Expression> exprs4(exprs);
scan_builder->Project({"a","b"});
scan_builder->Filter(cp::and_(exprs4));
2.Sort算子
Ascending | 正序 |
Descending | 倒序 |
示例:
std::vector<cp::SortKey> sort_keys; //按第c列以ASC排序
auto sort1 = cp::SortKey("c",arrow::compute::SortOrder::Ascending);
sort_keys.push_back(sort1);
auto sorts = cp::SortOptions(sort_keys);
auto out = cp::SortIndices(table,sorts);
auto result = cp::Take(table,out.ValueOrDie());
table = result->table();
3.复杂表达式运算
cast,when if,时间处理函数等 一键转化dates、times、timestamps等多种时间格式
4.聚合算子
Count | 计数数组中的值。 |
Mean | 计算数值数组的平均值。 |
Product | 计算数值数组的值的乘积。 |
Sum | 数值数组的和值。 |
MinMax | 计算数值数组的最小/最大值 |
Any | 测试布尔数组中的任何元素的值是否为真。 |
All | 测试布尔数组中的所有元素的值是否为true。 |
Mode | 计算数值数组的模态(最常用)值 |
Stddev | 计算一个数值数组的标准偏差 |
Variance | 计算一个数值数组的方差 |
Quantile | 计算数值数组的分位数 |
TDigest | 使用T-Digest算法计算数值数组的近似分位数 |
Index | 查找数组中值的第一个索引。 |
GroupBy | 分组聚合 |
示例:
auto out_count = cp::MinMax(table->column(1));//对table中的第2列求最大最小值
auto ss = out_count->scalar()->ToString();
------------------------------------------------------------------------------
结果:
<<<<<<<< out_count == {min:int64 = 7, max:int64 = 9}