我想把双倍分数转换成整数。我试过spark quantilediscretizer,但它太慢了。完成离散化过程需要几个小时。但是当我使用spark-sql的percentile函数时,它比quantilediscretizer快得多。那么,这两种方法之间有什么不同?在spark-sql中实现了哪些优化?
发布于 2019-06-24 14:19:35
默认percentile
不提供任何优化。在内部,它使用naive TypedImperativeAggregate
,收集所有值的计数(参见it's update
和merge
),然后将结果用于compute quantiles locally。
这种方法唯一真正的性能优势是它非常简单。然而,在最坏的情况下,它需要O(N)本地内存(感兴趣的列中的所有值都是唯一的),因此它是不可伸缩的,只能在相当有限的场景中应用。
相比之下,QuantileDiscretizer
uses Spark的approxQuantile
应用了(修改后的) Greenwald-Khanna algorithm。这种方法的计算成本更高,但与蛮力分配不同,它是可伸缩的,并且受到数据基数的限制。此外,还可以通过调整relativeError
来调整其性能。
https://stackoverflow.com/questions/56730017
复制相似问题