lidavidm commented on a change in pull request #11204: URL: https://github.com/apache/arrow/pull/11204#discussion_r714135631
########## File path: cpp/src/arrow/compute/kernels/aggregate_tdigest.cc ########## @@ -175,10 +182,52 @@ std::shared_ptr<ScalarAggregateFunction> AddTDigestAggKernels() { return func; } +std::shared_ptr<ScalarAggregateFunction> AddApproximateMedianAggKernels( + const ScalarAggregateFunction* tdigest_func) { + static ScalarAggregateOptions default_scalar_aggregate_options; + + auto median = std::make_shared<ScalarAggregateFunction>( + "approximate_median", Arity::Unary(), &approximate_median_doc, + &default_scalar_aggregate_options); + + auto sig = + KernelSignature::Make({InputType(ValueDescr::ANY)}, ValueDescr::Scalar(float64())); + + auto init = [tdigest_func]( + KernelContext* ctx, + const KernelInitArgs& args) -> Result<std::unique_ptr<KernelState>> { + std::vector<ValueDescr> inputs = args.inputs; + ARROW_ASSIGN_OR_RAISE(auto kernel, tdigest_func->DispatchBest(&inputs)); + const auto& scalar_options = + checked_cast<const ScalarAggregateOptions&>(*args.options); + TDigestOptions options; + // Default q = 0.5 + options.min_count = scalar_options.min_count; + options.skip_nulls = scalar_options.skip_nulls; + KernelInitArgs new_args{kernel, inputs, &options}; + return kernel->init(ctx, new_args); Review comment: Yes, both the hash and non-hash kernels copy the options (IIRC they need to since R doesn't keep the options alive either when building an exec plan). -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: github-unsubscr...@arrow.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org