Насколько отчетливо () реализовано в Spark?
Путем применения фиктивной агрегации со значением None
. Грубо
rdd.map((_, None)).reduceByKey((a, b) => a)
В чем сложность времени различна?
Учитывая общую сложность процесса, его трудно оценить. Это по крайней мере O (N log N), поскольку shuffle требует сортировки, но с учетом множества других операций, необходимых для построения дополнительных базовых структур данных (включая ассоциативные массивы), сериализации / десериализации данных, может быть больше, и на практике доминирует IO операции, а не чистая сложность алгоритма.
Есть ли способ избежать перетасовки в особых случаях?
Да, если потенциальные дубликаты гарантированно будут размещены в одном разделе.,
Вы можете использовать mapPartitions
для дедупликации данных, особенно если данные сортируются или иным образом гарантированно имеют дубликаты в изолированном районе. Без этого вы можете быть ограничены требованиями к памяти, если только вы не принимаете приблизительные результаты с вероятностным фильтром (например, фильтром Блума).
Обычно это невозможно, и подобная операция будет нелокальной.