Это 14-й день моего участия в Gengwen Challenge.Подробности о мероприятии:Обновить вызов
Решение 3. Отфильтруйте ключи, вызывающие перекос
- Если в заданиях Spark разрешено отбрасывать некоторые данные, вы можете отфильтровать ключи, которые могут привести к искажению данных, и отфильтровать данные, соответствующие ключам, которые могут привести к искажению данных. Таким образом, искажение данных не произойдет. в Spark рабочих мест.
Решение 4. Преобразование соединения сокращения в соединение карты
- При нормальных обстоятельствах операция объединения будет выполнять процесс перемешивания, а также выполнять объединение с уменьшением, то есть сначала агрегировать все одинаковые ключи и соответствующие значения в задачу сокращения, а затем выполнять соединение. Процесс обычного соединения показан на следующем рисунке:
- Обычное соединение будет проходить через процесс перемешивания, и после перемешивания это эквивалентно извлечению данных одного и того же ключа в задачу чтения в случайном порядке, а затем объединению, которое является соединением сокращения. Однако, если RDD относительно невелик, вы можете использовать широковещательный оператор полных данных + map для малого RDD, чтобы добиться того же эффекта, что и присоединение, то есть присоединение к карте. происходить. .
(Обратите внимание, что RDD не может быть передан в широковещательном режиме, только данные внутри RDD могут быть загружены в память драйвера посредством сбора и затем широковещательной передачи)
-
核心思路
:-
Присоединяйтесь к операции подключения без использования операторов, переменные используют карту класса операторов вещания для выполнения операции объединения и, таким образом, полностью обходят класс операции перемешивания, полностью избегая появления наклона и появления данных. Меньшие данные RDD напрямую извлекаются оператором, чтобы собрать конец памяти для драйвера, а затем создать широковещательную передачу своей переменной; RDD Затем другой оператор выполняет на основе карты в операторской функции из переменной широковещательную передачу, чтобы получить меньший RDD полный объем данных, каждый фрагмент данных с текущим RDD был выровнен в соответствии с ключом соединения, тот же ключ, если соединение, то данные будут двумя RDD с тем, как вам нужно подключиться.
-
В соответствии с приведенными выше идеями операция перемешивания вообще не будет выполняться, что принципиально устраняет проблему перекоса данных, которая может быть вызвана операцией объединения.
-
Когда в операции соединения возникает проблема перекоса данных, а в одном из RDD содержится небольшой объем данных, этот метод может быть предпочтительным, и эффект очень хороший. Процесс объединения карт показан на рисунке:
-
- Неприменимый анализ сценариев:
- Поскольку широковещательная переменная Spark сохраняет копию в каждом исполнителе, если объем данных обоих RDD относительно велик, то преобразование RDD с относительно большим объемом данных в широковещательную переменную может привести к переполнению памяти.
Решение 5. Образец выборки присоединяется к наклонному ключу отдельно
-
В Spark, если в RDD только один ключ, то процесс по умолчанию будет перемешивать ключ, соответствующий этим разбросанным данным, процесс завершается другой задачей сокращения.
-
Когда искажение данных вызвано одним ключом, искаженный ключ может быть извлечен отдельно для формирования СДР, а затем корень СДР, состоящий из искаженного ключа, может использоваться для отдельного присоединения к другим СДР. Механизм Spark, данные в этом RDD будут распределены по нескольким задачам для операции объединения на этапе перемешивания. Процесс раздельного соединения наклонного ключа показан на рисунке:
-
1. Применимый анализ сценариев:
-
Для данных в RDD вы можете преобразовать их в промежуточную таблицу или напрямую использовать countByKey(), чтобы увидеть объем данных, соответствующий каждому ключу в RDD. данных для одного ключа Тем более, что вы можете рассмотреть возможность использования этого метода.
-
Когда объем данных очень велик, вы можете рассмотреть возможность использования выборочной выборки для получения 10 % данных, а затем проанализировать, какой ключ в 10 % данных может привести к искажению данных, а затем извлечь данные, соответствующие этот ключ отдельно.
-
-
2. Неприменимый анализ сценариев:
- Если в RDD много ключей, вызывающих перекос данных, эта схема не применяется.