Это 15-й день моего участия в Gengwen Challenge.Подробности о мероприятии, пожалуйста, проверьте:Обновить вызов
Решение 6. Используйте случайные ключи для двойной агрегации
- При использовании таких операторов, как groupByKey и reduceByKey, вы можете использовать случайные ключи для достижения двойной агрегации, как показано на рисунке:
-
Сначала добавьте префикс случайного числа к ключу каждых данных с помощью оператора карты, разбейте ключ, измените исходный тот же ключ на другой ключ, а затем выполните первую агрегацию, чтобы исходная задача могла быть обработана данными. распределяется по нескольким задачам для локальной агрегации, затем префикс каждого ключа удаляется и агрегация выполняется снова.
-
Этот метод лучше влияет на перекос данных, вызванный такими операторами, как groupByKey и reduceByKey, он применим только к операции перемешивания класса агрегации, и область его применения относительно узка. Если это операция перемешивания класса соединения, необходимо использовать другие решения.
-
Этот метод также можно попробовать, когда предыдущие решения не работают.
Решение 7. Используйте расширение случайного числа для присоединения
-
Если большое количество ключей в RDD приводит к искажению данных во время операции соединения, нет смысла разделять ключи. В настоящее время для решения проблемы можно использовать только последнее решение. Для операции соединения мы можно рассмотреть один из них.Одно СДР данные расширяются, а другое СДР разбавляется и затем объединяется.
-
Мы изменим исходный тот же ключ на другой ключ, добавив случайный префикс, а затем мы сможем распределить эти обработанные «разные ключи» по нескольким задачам для обработки вместо того, чтобы одна задача обрабатывала большое количество одинаковых ключей. Это решение нацелено на ситуацию, когда имеется большое количество перекошенных ключей, и невозможно разделить некоторые ключи для отдельной обработки, необходимо расширить объем данных всего СДР, что требует больших ресурсов памяти.
- смысл:
-
Выберите RDD, используйте flatMap для расширения, добавьте числовой префикс (значение 1~N) к ключу каждых данных и сопоставьте один фрагмент данных с несколькими фрагментами данных; (расширение)
-
Выберите другой RDD и выполните операцию отображения карты.Ключу каждого данных предшествует случайное число (случайное число от 1 до N);(разбавление)
-
Соедините два обработанных RDD.
-
- ограничение:
Если оба СДР большие, явно невозможно расширить СДР в N раз;
Использование метода расширения может только уменьшить асимметрию данных, но не может полностью решить проблему асимметрии данных.
Используйте схему семь для дальнейшей оптимизации анализа схемы шесть:
-
Когда в СДР несколько ключей, данные перекошены, решение 6 уже неприменимо, а решение 7 очень ресурсоемко. В это время можно внедрить идею решения 7 для улучшения решение 6:
-
Для СДР, содержащего несколько ключей со слишком большим объемом данных, используйте оператор выборки для выборки выборки, затем подсчитайте количество каждого ключа и вычислите, какие ключи содержат наибольший объем данных.
-
Затем разделите данные, соответствующие этим ключам, из исходного СДР, чтобы сформировать отдельный СДР, и добавьте к каждому ключу префикс случайного числа в пределах n, не заставляя большинство искаженных ключей формировать другой СДР.
-
Затем другой СДР, который необходимо соединить, также отфильтровывается из данных, соответствующих наклонным ключам, для формирования отдельного СДР, и каждые данные расширяются на n частей данных.префикс, большинство ключей, которые не вызывают перекоса, также образуют другой СДР.
-
Затем соедините независимый СДР со случайным префиксом и еще один независимый СДР, расширенный в n раз.В это время исходный тот же ключ можно разбить на n частей и распределить по нескольким задачам для соединения.
-
Два других обычных RDD можно соединить как обычно.
-
Наконец, результаты двух объединений можно объединить с помощью оператора объединения, который является окончательным результатом соединения.
-