Понять замыкание в искре - PullRequest
       7

Понять замыкание в искре

0 голосов
/ 12 октября 2018

В режимах кластера, как написать функцию закрытия f, чтобы позволить каждому работнику получить доступ к копии переменной N.

N=5
lines=sc.parallelize(['early radical', 'french revolution','pejorative way', 'violent means'])
def f1(line):
    return line[:N]
l=lines.map(f1)
l.collect()

Я пытаюсь поэкспериментировать, чтобы выяснить, насколько мое пониманиеправо.В моем примере f1 работает в локальном режиме.

У меня нет кластера, и я действительно хочу знать, будет ли он работать в режимах кластера?Другими словами, может ли рабочий получить доступ к переменной N, которая определена вне f1, но используется внутри f1 в узле драйвера.

1 Ответ

0 голосов
/ 12 октября 2018

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

Вид.

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

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

Помня об этих двух вещах, мы можем ответитьвопрос:

У меня нет кластера, и я действительно хочу знать, будет ли он работать в режимах кластера?

Да, он будет работать нормальнораспределенный кластер.

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

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