Из официальной документации Спарк: «Спарк действительно обеспечивает две ограниченные типы общих переменных для двух общих моделей использования:. Широковещательных переменных и аккумуляторов»общие переменные с искрой
(http://spark.apache.org/docs/1.2.0/programming-guide.html#shared-variables)
Тем не менее, «Вещательные переменные позволяют программисту хранить только для чтения переменную, кэшированную на каждой машине, а не доставку ее с заданиями.«
То, что я хочу, это «broadcast read-write переменная», (я имею в виду: общую переменную, к которой могут обращаться и модифицировать все рабочие и драйверы!) Есть ли способ сделать это! спасибо
Это возможно, с некоторыми хакерами в источнике, однако для блокирования одновременной записи потребуется много блокировки. Короче говоря, это НЕ хорошая идея, и поэтому она не поддерживается. Что вы пытаетесь достичь? Скорее всего, вы можете сделать это без переменной мутации. –
На самом деле то, что заставило меня задуматься об общих переменных, заключается в том, что у меня есть сложный объект, на котором работники должны будут работать (этот объект инициализируется у водителя и передается работникам) ... моя проблема в том, что Spark создает новые объекты и отправляет их рабочим, и поэтому я не могу получить конечный результат рабочих в драйвере, поэтому я подумал, почему бы не создать общую переменную на уровне драйвера и передать ее работники, которые будут работать над ним, и в конце я могу получить их результат (конечный результат - обновленный объект, а не первый - инициализированный) у водителя ... –
Нет, для этого вы Лучшая ставка - отправить соответствующие данные назад, а затем уменьшить его, чтобы обновить объект с результатами. –