Jupyter Notebook работает через сервер vscode jupyter, получая ModuleNotFoundError: модуль не указан в pyspark на Amazon EMR - PullRequest
1 голос
/ 15 марта 2020

Я использую ноутбук Jupyter на удаленном сервере, на котором установлены pyspark и jupyter:

  • usr / bin / pyspark
  • usr / local / bin / jupyter

Я запустил сервер Jupyter, вызвав pyspark:

  • export PYSPARK_DRIVER_PYTHON = jupyter
  • export PYSPARK_DRIVER_PYTHON_OPTS = 'notebook --no-browser'

Мой блокнот jupyter вызывает мой модуль python в той же папке и работает на Amazon EMR:

from my_module import *
spark.sparkContext.addPyFile('my_module.py')

Когда я запускаю блокнот Jupyter в моем локальном браузере (IS SH туннелируется на сервер из локального), он может работать отлично. Если я преобразую записную книжку в эквивалентный файл python и запустлю ее с помощью spark-submit, она также будет работать.

Но когда я запускаю записную книжку в своем vscode (с установленным расширением Microsoft Python), который подключен удаленно к серверу и использовал тот же сервер Jupyter, который я создал. Это дало мне «ModuleNotFoundError: ни один модуль с именем« жаловаться »из my_module import *». Затем я сравнил рабочий каталог:

В моем браузере, на котором запущен ноутбук jupyter, рабочий каталог находился в той же папке, что и мой ноутбук. Но в vscode рабочая директория сервера jupyter - это моя директория на удаленном сервере. Даже если я "os.chdir" и "sys.path.append" в каталог своей записной книжки, он по-прежнему жаловался на ошибку "Нет имени модуля". Поэтому я изменил свой импорт как

from projects/project_name/my_module import *

Это сработало. Похоже, сервер jupyter в vscode все еще искал мой модуль в моей директории ~. Аналогично для addPyFile, он жаловался на то, что сначала не может найти my_module.py, мне нужно изменить его на

spark.sparkContext.addPyFile('projects/project_name/my_module.py')

Но работа на EMR создала другую проблему, он пожаловался на

" Нет модуля с именем 'projects' "

Я думал, что это из искровых рабочих узлов не может найти" проекты ". Потому что, когда я запускал свой ноутбук через локальный браузер без

spark.sparkContext.addPyFile('my_module.py')

, он выдавал ошибку:

"Нет модуля с именем 'my_module'"

Я думал, что это означало только мой основной экземпляр EMR может видеть my_module, но не другие узлы. Я добавил '' 'addPyFile (' my_module.py ')' 'и исправил проблему. Но я все еще не работал с сервером vscode jupyter.

В идеале, я хотел бы поместить мою записную книжку в каталог ~. и запустить его, не помещая __init__.py в проекты и папку имя_проекта.

Может кто-нибудь включить свет? Любая помощь с благодарностью!

...