【问题标题】:What's the diffrenence between spark sql percentile function and spark dataframe quantilediscretizer?spark sql 百分位函数和 spark dataframe quantilediscretizer 有什么区别?
【发布时间】:2019-11-05 20:58:15
【问题描述】:

我想将双倍分数转换为整数。我尝试了 spark quantilediscretizer,但它太慢了。完成离散化过程需要数小时。但是当我使用 spark-sql 的函数 percentile 时,它​​比 quantilediscretizer 快得多。那么这两种方式有什么区别,在spark-sql中实现了哪些优化呢?

【问题讨论】:

    标签: apache-spark apache-spark-sql


    【解决方案1】:

    默认percentile 不提供任何优化。在内部它使用朴素的TypedImperativeAggregate,它收集所有值的计数(见updatemerge),然后将结果用于compute quantiles locally

    这种方法唯一真正的性能优势是它非常简单。然而,在最坏的情况下它需要 O(N) 本地内存(感兴趣列中的所有值都是唯一的),因此它不可扩展,并且只能在相当有限的场景中应用。

    对比QuantileDiscretizeruses Spark 的approxQuantile,它适用(修改)Greenwald-Khanna algorithm。这种方法的计算成本更高,但与蛮力方法不同,它是可扩展的,并且受到数据基数的限制。此外,它的性能可以通过调整relativeError来调整。

    【讨论】:

    • 非常感谢。你的回答让我长久以来的困惑一清二楚!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2022-06-11
    • 2016-03-06
    • 2017-04-05
    • 2019-12-25
    • 2021-11-19
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多