主机端 UDF 实现用于分组聚合上下文的接口。更多...
主机端 UDF 实现用于分组聚合上下文的接口。
groupby 的主机端 UDF 实现需要从该类派生。除了实现基类 host_udf_base
中声明的虚函数外,此类派生类还必须定义函数 get_empty_output()
,用于在输入为空时返回结果,以及 operator()
,用于执行其分组操作。
执行期间,派生类可以通过一组 get*
访问器访问 libcudf 分组框架提供的内部数据,也可以通过 compute_aggregation
函数调用其他内置分组聚合。
- 注意
- 派生类只能执行基于排序的分组聚合。基于哈希的分组聚合需要更复杂的数据结构,目前尚不支持。
示例
my_udf_aggregation() = default;
{
}
{
}
[[nodiscard]]
bool is_equal(host_udf_base
const& other)
const override
{
return dynamic_cast<my_udf_aggregation const*>(&other) != nullptr;
}
[[nodiscard]] std::unique_ptr<host_udf_base>
clone()
const override
{
return std::make_unique<my_udf_aggregation>();
}
};
virtual bool is_equal(host_udf_base const &other) const =0
比较派生类的两个实例是否相等。
virtual std::unique_ptr< host_udf_base > clone() const =0
克隆实例。
cuda::mr::async_resource_ref< cuda::mr::device_accessible > device_async_resource_ref
virtual std::unique_ptr< column > get_empty_output(rmm::cuda_stream_view stream, rmm::device_async_resource_ref mr) const =0
当输入值列为空时获取输出。
virtual std::unique_ptr< column > operator()(rmm::cuda_stream_view stream, rmm::device_async_resource_ref mr) const =0
执行主机端 UDF 的主要分组计算。
定义位于 host_udf.hpp 文件的 267 行。