Реализация Spark Different

Я новичок в Spark и Scala. Я читал об отличной () функции Spark. Но я не мог найти никаких подробностей. У меня есть несколько сомнений, которые я не мог разрешить, и я их записал.

  1. Насколько отдельный () реализован в Spark?

    Я не настолько хорош в исходном коде Spark, чтобы иметь возможность идентифицировать весь поток. Когда я проверяю план выполнения, я вижу только ShuffleRDD

  2. Какова временная сложность отдельного?

    Я также обнаружил при поиске в Google, что он также каким-то образом использует хеширование и сортировку.

    Итак, я подумал, использует ли он тот же принцип, что и получение уникальных элементов из массива с помощью Hashset. Если бы это была одна система, я бы предположил, что временная сложность равна O (nlogn).

    Но он распределяется по множеству разделов и перемешивается, какова будет временная сложность?

  3. Есть ли способ избежать перетасовки в определенных случаях?

    Если я обязательно правильно разделю свои данные в соответствии с моим вариантом использования, можно ли избежать перетасовки?

    например, скажем, при взрыве столбца ArrayType в фрейме данных с уникальными строками создаются новые строки с дублированием других столбцов. Я выберу другие столбцы. Таким образом я убедился, что дубликаты уникальны для каждого раздела. Поскольку я знаю, что дубликаты уникальны для каждого раздела, Я могу избежать перетасовки и просто сбросить дубликаты в этот раздел

Я тоже нашел этот Перемешивает ли функция spark () только отдельные кортежи из каждого раздела.

Спасибо за вашу помощь . Пожалуйста, поправьте меня, если я где-то ошибаюсь.

Привет, добро пожаловать на переполнение стека. Пожалуйста, перейдите по ссылке Как спросить, чтобы узнать больше о том, как задать вопрос, и обновите свой вопрос соответствующим образом.

Jeroen Heier 03.11.2018 09:03

Сделаем это как можно скорее Спасибо stackoverflow.com/users/5133088/jeroen-heier

JohnAster 03.11.2018 09:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
1 306
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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 для дедупликации данных, особенно если данные отсортированы или иным способом гарантированно имеют дубликаты в изолированном окружении. Без этого вы можете быть ограничены требованиями к памяти, если вы не принимаете приблизительные результаты с помощью вероятностного фильтра (например, фильтра Блума).

В общем случае это невозможно, и подобные операции будут нелокальными.

Спасибо . Я многому научился. Постараюсь больше узнать о концепциях, которые вы упомянули в ответе.

JohnAster 18.11.2018 11:34

Другие вопросы по теме