SparkContext может быть использован только на драйвере - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь использовать функцию SparkContext.binaryFiles для обработки набора ZIP-файлов.Настройка состоит в том, чтобы отобразить из RDD имен файлов, в котором функция отображения использует функцию binaryFiles.

Проблема состоит в том, что SparkContext упоминается в функции отображения, и я получаю эту ошибку.Как это исправить?

PicklingError: Не удалось сериализовать объект: Исключение: Похоже, что вы пытаетесь сослаться на SparkContext из широковещательной переменной, действия или преобразования.SparkContext может использоваться только в драйвере, а не в коде, который он запускает на рабочих.Для получения дополнительной информации см. SPARK-5063.

Пример кода:

file_list_rdd.map(lambda x: sc.binaryFiles("/FileStore/tables/xyz/" + x[1]))

, где file_list_rdd - СДР (id, имя файла) кортежей.

1 Ответ

0 голосов
/ 27 августа 2018

Может показаться, что вам нужно вызывать функцию без ссылки на контекст spark - и, если это действительно применимо.

Также рассмотрите возможность перемещения функции / def в сам оператор (ы) карты.Это обычно делается - и мы используем функциональный язык.Я не мог разрешить ошибки сериализации, если не прибегну к вышеупомянутым и не переместлю определения в логику исполнителя.

Некоторая обработка файлов также выполняется через драйвер.Этот пост может представлять интерес: Как парализовать спарк и т. Д. Без потери информации (в именах файлов) .Основываясь на вашем фрагменте кода, я бы посмотрел на это здесь.

И вы должны использовать что-то вроде этого и обработать соответствующим образом:

 zip_data = sc.binaryFiles('/user/path-to-folder-with-zips/*.zip')

Теперь вы используете его из драйвера и sc.

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