Как получить Apache Spark до завершения карты, чтобы уменьшить использование памяти? - PullRequest
0 голосов
/ 27 апреля 2018

Я выполняю работу по уменьшению карты с помощью Apache Spark, но на этапе отображения создается структура, которая занимает много памяти. Как я могу заставить ее уменьшать и удалять из памяти карту перед добавлением в карту дополнительных сопоставленных объектов?

Я в основном делаю myrdd.map (f) .reduce (r). Однако f возвращает очень большой объект, поэтому мне нужно, чтобы редуктор запустился, а затем удалил сопоставленные объекты из памяти, прежде чем слишком много скопится. Могу ли я сделать это как-нибудь?

Ответы [ 2 ]

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

trait BigThing

val mapFunction: SmallThing => BigThing = ???
val reduceFunction: (BigThing, BigThing) => BigThing = ???

val rdd: RDD[SmallThing] = ???

//initial implementation:
val result1: BigThing = rdd.map(mapFunction).reduce(reduceFunction)

//equivalent implementation:
val emptyBigThing: BigThing = ???
val result2: BigThing = rdd.aggregate(emptyBigThing)(seqOp = (agg, small) => reduceFunction(agg, mapFunction(small)), combOp = reduceFunction)
0 голосов
/ 27 апреля 2018

Аналогично объединителю в MapReduce, при работе с парами ключ / значение можно использовать интерфейс combineByKey() для настройки функциональности объединителя. Такие методы, как reduceByKey() по умолчанию, используют свой собственный объединитель для локального объединения данных в каждом разделе для данного ключа

Аналогично aggregate() (который используется с одноэлементным СДР), combineByKey() позволяет пользователю возвращать другой тип элемента СДР по сравнению с типом элемента Входной СДР.

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