Python 2 & 3 Интерпретатор для Apache Zeppelin =============================================== Конфигурирование ----------------- Для настройки **Python** для **Apache Zeppelin** необходимо задать параметры, представленные в таблице. .. csv-table:: Параметры конфигурации :header: "Параметр", "Значение по умолчанию", "Описание" :widths: 45, 10, 45 "zeppelin.python", "python", "Путь к уже установленному бинарному пакету Python (может быть *python2* или *python3*). Если *python* не прописан в *$PATH*, можно задать полный путь (например: */usr/bin/python*)" "zeppelin.python.maxResult", "1000", "Максимальное количество отображаемых строк датафрейма" Включение интерпретатора Python -------------------------------- Для включения интерпретатора **Python** в блокноте необходимо нажать значок "Gear" и выбрать "Python". Использование интепретатора Python ----------------------------------- Для выбора интерпретатора **Python** необходимо в параграфе указать *%python*, а затем ввести все команды. Интерпретатор может работать, только если уже установлен *python* (интерпретатор не предоставляет собственные бинарные файлы *python*). Получить справку можно вызовом команды *help()*. Переменные окружения Python ---------------------------- + По умолчанию По умолчанию *PythonInterpreter* использует команду *python*, определенную в свойстве *zeppelin.python* для запуска процесса *python*. Интерпретатор может использовать все установленные модули (с помощью *pip*, *easy_install* и других) + Conda **Conda** -- это система управления пакетами и переменными окружения *python*. Интерпретатор *%python.conda* позволяет переключаться между переменными окружения. Перечень переменных окружения: :command:`%python.conda` Активация переменных окружения: :command:`%python.conda activate [ENVIRONMENT_NAME]` Деактивация переменных окружения: :command:`%python.conda deactivate` + Докер Интерпретатор *%python.docker* позволяет *PythonInterpreter* создавать процесс *python* в указанном докер-контейнере. Активация переменных окружения: :: %python.docker activate [Repository] %python.docker activate [Repository:Tag] %python.docker activate [Image Id] Деактивация переменных окружения: :command:`%python.docker deactivate` Пример: :: # activate latest tensorflow image as a python environment %python.docker activate gcr.io/tensorflow/tensorflow:latest Использование Zeppelin Dynamic Forms ------------------------------------- Динамическую форму **Zeppelin** можно использовать внутри кода **Python** (см. `подробное описание `_). **Zeppelin Dynamic Form** может использоваться только в том случае, если в системе установлена *py4j Python library*. Библиотеку можно установить с помощью *pip install py4j*. Пример: :: %python ### Input form print (z.input("f1","defaultValue")) ### Select form print (z.select("f1",[("o1","1"),("o2","2")],"2")) ### Checkbox form print("".join(z.checkbox("f3", [("o1","1"), ("o2","2")],["1"]))) Интеграция Matplotlib ---------------------- Интерпретатор **Python** может автоматически отображать графики *matplotlib* с помощью встроенного модуля *pyplot*: :: %python import matplotlib.pyplot as plt plt.plot([1, 2, 3]) Это рекомендуемый метод использования *matplotlib* из блокнота **Zeppelin**. Выходные данные команды по умолчанию преобразовываются в HTML, неявно используя *%html*. Дополнительные настройки можно выполнить с помощью встроенного метода *z.configure_mpl()*. Например: :: z.configure_mpl(width=400, height=300, fmt='svg') plt.plot([1, 2, 3]) В данном примере изображение задается в формате *SVG 400x300*, которое по умолчанию обычно представляется в формате *600x400* и *PNG* соответственно. В дальнейшем можно будет использовать другую библиотеку, *angular*, которая позволит обновлять график, созданный одним параграфом, непосредственно из другого (выходные данные в таком случае *%angular* вместо *%html*). Функция уже доступна в интерпретаторе **pyspark**. Если **Zeppelin** не может найти файлы *matplotlib* (которые обычно находятся в *$ZEPPELIN_HOME/interpreter/lib/python*) в *PYTHONPATH*, то программа автоматически устанавливается в *agg* и нижеприведенные инструкции могут использоваться с ограничениями. Если не удается загрузить встроенные модули, можно использовать *z.show(plt)*: :command:`python %python import matplotlib.pyplot as plt plt.figure() (.. ..) z.show(plt) plt.close()` Данная функция *z.show()* может принимать дополнительные параметры для адаптации размеров графика (ширина и высота), а также его выходной формат -- *png* или опционально *svg* (:numref:`Рис.%s.`): :: %python z.show(plt, width='50px') z.show(plt, height='150px', fmt='svg') .. _zeppelin_python_matplotlib: .. figure:: ../imgs/zeppelin_python_matplotlib.* :align: center Интеграция Matplotlib Интеграция с Pandas -------------------- Система отображения таблиц **Apache Zeppelin** предоставляет встроенные возможности визуализации данных. Интерпретатор **Python** использует его для визуализации датафреймов *Pandas*, аналогично через API функции *z.show()* как в случае интеграции с библиотекой *matplotlib* (`Интеграция Matplotlib`_). Например: :: import pandas as pd rates = pd.read_csv("bank.csv", sep=";") z.show(rates) SQL поверх датафреймов Pandas ------------------------------- Существует удобный интерпретатор *%python.sql*, который по своему использованию похож на **Apache Spark** в **Zeppelin** и позволяет использовать язык **SQL** для запроса к датафреймам **Pandas** и визуализации результатов через встроенную систему отображения таблиц `Table Display System `_. Предварительные настройки: + Pandas *pip install pandas* + PandaSQL *pip install -U pandasql* В случае, если по умолчанию выбран интерпретатор **Python** (первый в списке интерпретаторов под значком шестеренки), можно его указывать как просто *%sql*: + Первый параграф: :: import pandas as pd rates = pd.read_csv("bank.csv", sep=";") + Следующий параграф: :: %sql SELECT * FROM rates WHERE age < 40 В противном случае -- *%python.sql*. Техническое описание --------------------- Подробные технические сведения о текущей реализации приведены по ссылке `python/README.md `_. Некоторые функции, еще не реализованные в интерпретаторе **Python**: + Прерывание выполнения параграфа (способ *cancel ()*) в настоящее время поддерживается только в системах **Linux** и **MacOs**. Если интерпретатор запущен в другой ОС (например, в **MS Windows**), прерывание параграфа завершает работу всего процесса интерпретатора. **JIRA** ticket (*ZEPPELIN-893*) открыт для реализации этой функции в следующей версии интерпретатора; + Строка состояния в web-интерфейсе (метод *getProgress()*) в настоящее время не реализована; + Завершение кода в настоящее время не реализовано.