Реализация Spark отличается - PullRequest
0 голосов
/ 03 ноября 2018

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

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

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

  2. В чем сложность времени различается?

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

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

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

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

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

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

Я также обнаружил, что Разве функция spark () перетасовывает только отдельные кортежи из каждого раздела .

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

1 Ответ

0 голосов
/ 04 ноября 2018

Насколько отчетливо () реализовано в Spark?

Путем применения фиктивной агрегации со значением None. Грубо

rdd.map((_, None)).reduceByKey((a, b) => a)

В чем сложность времени различна?

Учитывая общую сложность процесса, его трудно оценить. Это по крайней мере O (N log N), поскольку shuffle требует сортировки, но с учетом множества других операций, необходимых для построения дополнительных базовых структур данных (включая ассоциативные массивы), сериализации / десериализации данных, может быть больше, и на практике доминирует IO операции, а не чистая сложность алгоритма.

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

Да, если потенциальные дубликаты гарантированно будут размещены в одном разделе.,

Вы можете использовать mapPartitions для дедупликации данных, особенно если данные сортируются или иным образом гарантированно имеют дубликаты в изолированном районе. Без этого вы можете быть ограничены требованиями к памяти, если только вы не принимаете приблизительные результаты с вероятностным фильтром (например, фильтром Блума).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...