Я новичок в Spark и Scala. Я читал об отличной () функции Spark. Но я не мог найти никаких подробностей. У меня есть несколько сомнений, которые я не мог разрешить, и я их записал.
Насколько отдельный () реализован в Spark?
Я не настолько хорош в исходном коде Spark, чтобы иметь возможность идентифицировать весь поток. Когда я проверяю план выполнения, я вижу только ShuffleRDD
Какова временная сложность отдельного?
Я также обнаружил при поиске в Google, что он также каким-то образом использует хеширование и сортировку.
Итак, я подумал, использует ли он тот же принцип, что и получение уникальных элементов из массива с помощью Hashset. Если бы это была одна система, я бы предположил, что временная сложность равна O (nlogn).
Но он распределяется по множеству разделов и перемешивается, какова будет временная сложность?
Есть ли способ избежать перетасовки в определенных случаях?
Если я обязательно правильно разделю свои данные в соответствии с моим вариантом использования, можно ли избежать перетасовки?
например, скажем, при взрыве столбца ArrayType в фрейме данных с уникальными строками создаются новые строки с дублированием других столбцов. Я выберу другие столбцы. Таким образом я убедился, что дубликаты уникальны для каждого раздела. Поскольку я знаю, что дубликаты уникальны для каждого раздела, Я могу избежать перетасовки и просто сбросить дубликаты в этот раздел
Я тоже нашел этот Перемешивает ли функция spark () только отдельные кортежи из каждого раздела.
Спасибо за вашу помощь . Пожалуйста, поправьте меня, если я где-то ошибаюсь.
Сделаем это как можно скорее Спасибо stackoverflow.com/users/5133088/jeroen-heier





How distinct() is implemented in Spark ?
Применяя фиктивную агрегацию со значением None. Грубо
rdd.map((_, None)).reduceByKey((a, b) => a)
What is the Time Complexity of distinct ?
Учитывая общую сложность процесса, оценить это сложно. Это как минимум O (N log N), поскольку для перемешивания требуется сортировка, но с учетом множества других операций, необходимых для создания дополнительных структур данных вне ядра (включая ассоциативные массивы), сериализация / десериализация данных может быть выше, и на практике преобладает ввод-вывод. операции, а не чистая сложность алгоритма.
Is there a way to avoid shuffling in particular cases ?
Да, если гарантировано размещение потенциальных дубликатов в одном разделе.,
Вы можете использовать mapPartitions для дедупликации данных, особенно если данные отсортированы или иным способом гарантированно имеют дубликаты в изолированном окружении. Без этого вы можете быть ограничены требованиями к памяти, если вы не принимаете приблизительные результаты с помощью вероятностного фильтра (например, фильтра Блума).
В общем случае это невозможно, и подобные операции будут нелокальными.
Спасибо . Я многому научился. Постараюсь больше узнать о концепциях, которые вы упомянули в ответе.
Привет, добро пожаловать на переполнение стека. Пожалуйста, перейдите по ссылке Как спросить, чтобы узнать больше о том, как задать вопрос, и обновите свой вопрос соответствующим образом.