Разделение Apache Spark на карте () - PullRequest
0 голосов
/ 27 апреля 2018

Может кто-нибудь объяснить мне это?

Обратная сторона, однако, заключается в том, что для преобразований, которые не могут гарантировать создание известного разбиения, в выходном СДР не будет установлен разделитель. Например, если вы вызываете map () для RDD с хэш-разделением пар ключ / значение, функция, переданная в map (), может теоретически изменить ключ каждого элемента, поэтому в результате не будет разделителя. Spark не анализирует ваши функции, чтобы проверить, сохраняют ли они ключ. Вместо этого он предоставляет две другие операции, mapValues ​​() и flatMap Values ​​(), которые гарантируют, что ключ каждого кортежа останется прежним.

Источник Изучение искры от Матей Захария, Патрик Венделл, Энди Конвински, Холден Карау .

1 Ответ

0 голосов
/ 27 апреля 2018

Это довольно просто:

  • Partitioner - это функция от ключа к разделу - Как работает HashPartitioner?
  • Разделитель может быть применен к RDD[(K, V)], где K - это ключ.
  • После перераспределения с использованием определенного Partitioner все пары с одинаковым ключом гарантированно находятся в одном разделе.

Теперь давайте рассмотрим два примера:

  • map принимает функцию (K, V) => U и возвращает RDD[U] - другими словами, он преобразует целое Tuple2. Он может сохранять или не сохранять ключ как есть, он может даже не возвращать RDD[(_, _)], поэтому разбиение не сохраняется.
  • mapValues принимает функцию (V) => U и возвращает RDD[(K, U)] - другими словами, он преобразует только значения. Ключ, который определяет членство в разделе, никогда не затрагивается, поэтому разделение сохраняется.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...