В DataBricks в Azure:

Я выполняю следующие шаги:

  • создайте библиотеку из яйца Python, скажем simon_1_001.egg, которая содержит модуль simon.

  • подключите библиотеку к кластеру и перезапустите кластер

  • подключите ноутбук к кластеру и запустите:

    импортировать Саймона как s
    напечатать s. __file__

  • запустите ноутбук, и он правильно даст мне имя файла, включая строка 'simon_1_001.egg'

  • затем отсоедините и удалите файл с яйцом, даже очистив корзину.

  • перезапустите кластер, отсоедините и подключите ноутбук, запустите его и вместо того, чтобы жаловаться, что не может найти модуль simon, он запускается и отображает ту же строку

Точно так же, если я загружаю более новую версию яйца, скажем simon_1_002.egg, она все равно отображает ту же строку. Если я подожду полчаса очистки и перезапущу несколько раз, в конечном итоге он подберет новую библиотеку и отобразит simon_1_002.egg.

Как правильно очистить старые файлы с яйцами?

1
Simon W 21 Сен 2018 в 14:07

2 ответа

Лучший ответ

Саймон, это ошибка в платформе Databricks. Когда библиотека создается в Databricks с использованием jar, файл сохраняется в dbfs:/FileStore и /databricks/python2/lib/python2.7/site-packages/ для Py2 и /databricks/python3/lib/python3.5/site-packages/ для кластеров Py3.

В обоих случаях jar и egg путь сохраняется при создании библиотеки. Когда библиотека отсоединяется и удаляется из корзины, предполагается, что она удалит копию из DBFS, чего в настоящее время не делает.

Чтобы устранить эту проблему несогласованности, вы можете проверить вложенную вкладку среды в Spark UI или использовать %sh ls в ячейке для поиска соответствующих путей, чтобы убедиться, правильно ли удалена библиотека, а также удалить их с помощью {{ X1}} перед перезапуском кластера и подключением более новой версии библиотеки.

3
Sai 22 Сен 2018 в 02:52

Есть еще одна забавная ошибка платформы Databricks в зависимостях работы. Удаление зависимой библиотеки в пользовательском интерфейсе ничего не дает, поэтому старые версии зависимостей застревают там, и задания не работают, даже если вы удалите jar / egg из dbfs.

Единственный вариант - обновить задания с помощью CLI или API. Итак, вам нужно сделать что-то в этом роде (CLI):

databricks jobs list

Найдите свой идентификатор работы, а затем:

databricks jobs get --job-id 5

Сохраните вывод в json-файл job.json, удалите данные за пределами settings, скопируйте данные из settings в корень документа json, удалите ненужные библиотеки, а затем выполните:

 databricks jobs reset --job-id 5 --json-file job.json 
1
pcv 17 Апр 2019 в 14:55