我必须使用Spark 2.2找到大量数字的确切中位数。由于这是一项练习,因此不允许对整个rdd进行排序或使用approxQuantile
或Percentile_rank
之类的函数。
我的实现是具有随机分区的递归Quickselect
算法,以实现合理的复杂性。我认为Map / Reduce方法将对此有好处,但我愚蠢到不了解a)如何正确地将自己的函数(带有多个参数)作为mapping
函数传递,以及b)如何传递整个数据集作为参数有效。
我从文档或Internet上找到的所有示例都非常简单:与RDD
逐一遍历DF
或lambda
值并将其汇总,而不是将rdd作为数组处理。与映射函数相同:单参数函数只是rdd.map(fun)
,但是如果我需要将fun(arr, p1, p2, p3)
作为映射函数,而实际的rdd
作为arr传递呢?