Spark CollectAsMap

Я хотел бы знать, как collectAsMap работает в Spark. В частности, я хотел бы знать, где будет происходить агрегация данных всех разделов? Агрегирование происходит либо в master, либо в workers. В первом случае каждый работник отправляет свои данные на master и когда мастер собирает данные от каждого работника, то master будет агрегировать результаты. Во втором случае работники несут ответственность за агрегирование результатов(после обмена данными между их) и после этого результаты будут отправлены мастеру.

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

3 ответов


вы можете увидеть, как они делают collectAsMap здесь. Поскольку тип RDD является кортежем, похоже,что они просто используют обычный сбор RDD, а затем переводят кортежи в карту пар ключей и значений. Но они упоминают в комментарии, что multi-map не поддерживается, поэтому вам нужно сопоставление ключа/значения 1 к 1 через ваши данные.

функция collectAsMap

collect выполняет задание Spark и возвращает результаты из каждого раздела из работники и компоситы они с участком уменьшения/конкат на водителе.

собирать функция

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

Примечание, Если вы делаете преобразования на вашем RDD до использования collectAsMap которые вызывают перетасовку, может быть промежуточный шаг, который заставляет работников обмен данными между собой. Проверьте пользовательский интерфейс приложения мастера кластеров, чтобы увидеть дополнительную информацию о том, как spark выполняет приложение.


прежде всего, в обеих операциях все ваши данные, которые присутствуют в RDD, будут путешествовать от разных исполнителей/работников к мастеру/водителю. Как собрать и collectAsMap будет просто собирать данные от различных исполнителей/работников. Вот почему всегда рекомендуется не использовать collect, пока и если у вас нет другого варианта.

Я должен сказать, это последняя коллекция, которую нужно рассмотреть с точки зрения производительности вид.

  1. собрать: вернет результаты в виде массива.
  2. collectAsMap вернет результаты для парного RDD как коллекции карт. И поскольку он возвращает коллекцию карт, вы получите только пары с уникальными ключами, а пары с дубликатами ключей будут удалены.

с уважением,

Neeraj


поддержка вышеуказанных ответов:

collectAsMap() - возвращает пары ключ-значение в словарь (countByKey() еще одна функция, которая возвращает словарь.)

collectAsMap(), Collect(), take(n), takeOrdered(n), takeSample(False,..)

эти методы приносят все данные водителю. Программисту нужно принять precaustion пока использующ их в продукции.