версия pandas не обновляется после установки новой версии на databricks

#python #python-3.x #pandas #databricks

#python #python-3.x #pandas #блоки данных #databricks

Вопрос:

Я пытаюсь решить проблему pandas при запуске кода python3.7 на databricks.

Ошибка:

  ImportError: cannot import name 'roperator' from 'pandas.core.ops' (/databricks/python/lib/python3.7/site-packages/pandas/core/ops.py)
  

версия pandas:

 pd.__version__
0.24.2
  

Я запускаю

  from pandas.core.ops import roperator
  

ну, на моем ноутбуке с

 pandas 0.25.1
  

Итак, я попытался обновить pandas на databricks.

 %sh pip uninstall -y pandas
Successfully uninstalled pandas-1.1.2

%sh pip install pandas==0.25.1
 Collecting pandas==0.25.1
 Downloading pandas-0.25.1-cp37-cp37m-manylinux1_x86_64.whl (10.4 MB)
 Requirement already satisfied: python-dateutil>=2.6.1 in /databricks/conda/envs/databricks-ml/lib/python3.7/site-packages (from pandas==0.25.1) (2.8.0)
 Requirement already satisfied: numpy>=1.13.3 in /databricks/conda/envs/databricks-ml/lib/python3.7/site-packages (from pandas==0.25.1) (1.16.2)
 Requirement already satisfied: pytz>=2017.2 in /databricks/conda/envs/databricks-ml/lib/python3.7/site-packages (from pandas==0.25.1) (2018.9)
 Requirement already satisfied: six>=1.5 in /databricks/conda/envs/databricks-ml/lib/python3.7/site-packages (from python-dateutil>=2.6.1->pandas==0.25.1) (1.12.0)
 Installing collected packages: pandas
 ERROR: After October 2020 you may experience errors when installing or updating packages. 
  This is because pip will change the way that it resolves dependency conflicts.

  We recommend you use --use-feature=2020-resolver to test your packages with the new resolver before it becomes the default.

  mlflow 1.8.0 requires alembic, which is not installed.
  mlflow 1.8.0 requires prometheus-flask-exporter, which is not installed.
  mlflow 1.8.0 requires sqlalchemy<=1.3.13, which is not installed.
  sklearn-pandas 2.0.1 requires numpy>=1.18.1, but you'll have numpy 1.16.2 which is incompatible.
   sklearn-pandas 2.0.1 requires pandas>=1.0.5, but you'll have pandas 0.25.1 which is incompatible.
   sklearn-pandas 2.0.1 requires scikit-learn>=0.23.0, but you'll have scikit-learn 0.20.3 which is incompatible.
   sklearn-pandas 2.0.1 requires scipy>=1.4.1, but you'll have scipy 1.2.1 which is incompatible.
   Successfully installed pandas-0.25.1
  

Когда я запускаю:

  import pandas as pd
  pd.__version__
  

это все еще:

  0.24.2
  

Я что-то пропустил?

Спасибо

Ответ №1:

Действительно рекомендуется устанавливать библиотеки с помощью скрипта инициализации кластера. %sh Команда выполняется только на узле драйвера, но не на узлах исполнителя. И это также не влияет на экземпляр Python, который уже запущен.

Правильным решением будет использовать dbutils.library команды, подобные этой:

 dbutils.library.installPyPI("pandas", "1.0.1")
dbutils.library.restartPython()
  

это установит библиотеку во все места, но для получения новых библиотек потребуется перезапуск Python.

введите описание изображения здесь

Кроме того, хотя можно указать только имя пакета, рекомендуется явно указывать версию, поскольку некоторые версии библиотеки могут быть несовместимы с runtime. Кроме того, рассмотрите возможность использования более новых сред выполнения, где версии библиотеки уже обновлены — проверьте примечания к выпуску для сред выполнения, чтобы выяснить, какие версии библиотеки установлены из коробки.

Для более новых сред выполнения Databricks вы можете использовать новые волшебные команды: %pip и %conda для установки зависимостей. Смотрите документацию для получения более подробной информации.

Комментарии:

1. После установки pandas и перезапуска python он будет установлен на всех узлах кластера. Что, если кластер перезапустится снова? Нужно ли мне снова запускать dbutils?

2. Я не проверял, но если она просто перезапущена, я думаю, что она должна остаться. Но если вы хотите гарантировать — используйте в нем скрипт для установки pandas