Я должен найти точную медиану огромного набора чисел, используя Spark 2.2. Поскольку это упражнение, сортировка всего rdd или использование таких функций, как approxQuantile
или Percentile_rank
, не допускаются.
Моя реализация представляет собой рекурсивный алгоритм Quickselect
с рандомизированными разбиениями для достижения разумной сложности. Я предполагаю, что подход Map / Reduce был бы хорош для этого, но я просто достаточно глуп, чтобы не понимать a) как правильно передать мою собственную функцию (с несколькими параметрами) как функцию mapping
и b) как передать всю набор данных эффективно в качестве параметра.
Все примеры, которые я нашел из документации или из Интернета, довольно просты: проходить последовательно значения RDD
или DF
по одному с lambda
и суммировать их вместо обработки rdd как массив. То же самое с функцией отображения: функция с одним параметром была бы просто rdd.map(fun)
, но что, если мне нужно передать fun(arr, p1, p2, p3)
как функцию отображения, с фактическим rdd
как arr?