适用于Apache Zeppelin的Python 2和3解释器
概述
Zeppelin 支持 Python 语言,该语言在数据分析和机器学习中非常流行。
| 名称 | 类别 | 描述 |
|---|---|---|
| %python | PythonInterpreter | 普通的Python解释器,依赖最少,只需要安装Python环境,%python 如果满足其先决条件,将使用IPython |
| %python.ipython | IPythonInterpreter | 通过IPython提供更高级的Python运行时环境,几乎与Jupyter的使用体验相同。它需要更多的依赖,但这是在Zeppelin中使用Python的推荐解释器,更多详情请见下文 |
| %python.sql | PythonInterpreterPandasSql | 提供SQL功能以通过pandasql查询Pandas DataFrame中的数据,它可以访问%python中的数据框 |
主要功能
| 功能 | 描述 |
|---|---|
| 支持原生Python和IPython | 原生Python只需要安装python,IPython提供了几乎与Jupyter相同的用户体验,如内联绘图、代码补全、魔术方法等。 |
| 内置的 ZeppelinContext 支持 | 您可以使用 ZeppelinContext 来可视化 pandas 数据框 |
| 支持在Pandas数据框上使用SQL | 您可以使用SQL查询在Python中定义的数据框 |
| 在yarn集群中使用自定义的Python运行时运行Python | 您可以在yarn集群中使用自定义的Python运行时运行Python,而不会相互影响 |
在Zeppelin docker中玩Python
对于初学者,我们建议您先在Zeppelin docker中尝试Python。
在Zeppelin docker镜像中,我们已经安装了
miniconda和许多有用的Python库
包括IPython的先决条件,因此%python将使用IPython。
无需任何额外配置,您可以直接运行Python Tutorial文件夹下的大部分教程笔记。
docker run -u $(id -u) -p 8080:8080 --rm --name zeppelin apache/zeppelin:0.11.2
运行上述命令后,您可以打开http://localhost:8080在Zeppelin中玩Python。
配置
| 属性 | 默认值 | 描述 |
|---|---|---|
| zeppelin.python | python | 已安装的Python二进制文件的路径(可能是python2或python3)。
如果python不在你的$PATH中,你应该明确设置这个属性(例如:/usr/bin/python)。
|
| zeppelin.python.maxResult | 1000 | 显示的数据框行数的最大值。 |
| zeppelin.python.useIPython | true | 当此属性为true时,%python将被委托给%python.ipython,如果IPython可用,否则
IPython仅在%python.ipython中使用。
|
| zeppelin.yarn.dist.archives | 用于yarn模式下的ipython。这是一个通用的zeppelin解释器配置,不是特定于python的。对于Python解释器,它用于指定conda环境存档文件,该文件可以位于本地文件系统或hadoop兼容文件系统上。 | |
| zeppelin.interpreter.conda.env.name | 用于yarn模式下的ipython。conda环境名称,即解释器yarn容器工作目录中的文件夹名称。 |
原生Python解释器 (%python)
普通的Python解释器提供了基本的Python解释器功能,只需要安装Python即可。
Matplotlib 集成
普通的Python解释器可以使用matplotlib自动内联显示matplotlib图形:
%python
import matplotlib.pyplot as plt
plt.plot([1, 2, 3])
此命令的输出默认将通过隐式使用%html魔法转换为HTML。可以使用内置的z.configure_mpl()方法进行额外配置。例如,
z.configure_mpl(width=400, height=300, fmt='svg')
plt.plot([1, 2, 3])
将生成一个400x300的SVG格式图像,默认情况下通常分别为600x400和PNG格式。
未来,可以使用另一个名为angular的选项,使得可以直接从另一个段落更新由一个段落生成的图表
(输出将是%angular而不是%html)。然而,此功能已经在pyspark解释器中可用。
更多详细信息可以在附带的“Zeppelin教程:Python - matplotlib基础”教程笔记本中找到。
如果Zeppelin无法在您的PYTHONPATH中找到matplotlib后端文件(通常应位于$ZEPPELIN_HOME/interpreter/lib/python),
那么后端将自动设置为agg,并且可以使用以下(否则已弃用的)指令进行更有限的内联绘图。
如果无法加载内联后端,请使用 z.show(plt):
%python
import matplotlib.pyplot as plt
plt.figure()
(.. ..)
z.show(plt)
plt.close()
z.show() 函数可以接受可选参数来调整图形的尺寸(宽度和高度)以及输出格式(png 或可选的 svg)。
%python
z.show(plt, width='50px')
z.show(plt, height='150px', fmt='svg')

IPython 解释器 (%python.ipython) (推荐)
IPython 比普通的 Python 解释器更强大,具有额外的功能。这是我们推荐你使用而不是普通 Python 解释器的原因。你可以使用 IPython 与 Python2 或 Python3,这取决于你在 zeppelin.python 中设置的 Python 版本。
先决条件
- 对于非Anaconda环境,您需要安装以下软件包
pip install jupyter
pip install grpcio
pip install protobuf
- 对于anaconda环境(
zeppelin.python指向anaconda下的python)
pip install grpcio
pip install protobuf
Zeppelin 在使用 %python 时会检查上述先决条件,如果满足 IPython 的先决条件,%python 将使用 IPython 解释器,否则它将使用 %python 中的普通 Python 解释器。
除了普通Python解释器的所有基本功能外,您还可以使用所有IPython高级功能,就像在Jupyter Notebook中使用一样。
查看教程笔记Python Tutorial/1. IPython Basic和Python Tutorial/2. IPython Visualization Tutorial了解如何在Zeppelin中使用IPython。
使用IPython魔法命令
%python.ipython
#python help
range?
#timeit
%timeit range(100)
使用 matplotlib
%python.ipython
%matplotlib inline
import matplotlib.pyplot as plt
print("hello world")
data=[1,2,3,4]
plt.figure()
plt.plot(data)
运行shell命令
%python.ipython
!pip install pandas
彩色文本输出

更多类型的可视化
例如,您可以像在Jupyter中一样使用hvplot,查看教程笔记Python Tutorial/2. IPython Visualization Tutorial以获取更多可视化示例。

更好的代码补全
输入 tab 可以像在 Jupyter 中一样显示所有补全候选。

Pandas 集成
Apache Zeppelin Table Display System 提供了内置的数据可视化功能。
Python 解释器利用它通过 z.show() API 来可视化 Pandas 数据框。
例如:

默认情况下,z.show 只显示1000行,你可以配置 zeppelin.python.maxResult 来调整最大行数。
在Pandas数据帧上使用SQL
有一个方便的%python.sql解释器,它与Zeppelin中的Apache Spark体验相匹配,并允许使用SQL语言查询Pandas DataFrames,并通过内置的表格显示系统可视化结果。
%python.sql可以访问在%python中定义的数据框。
先决条件
- Pandas
pip install pandas - PandaSQL
pip install -U pandasql
这是一个例子:
第一段
%python import pandas as pd rates = pd.read_csv("bank.csv", sep=";")下一段
%python.sql SELECT * FROM rates WHERE age < 40

使用Zeppelin动态表单
你可以在你的Python代码中利用Zeppelin Dynamic Form。
示例:
%python
### Input form
print(z.input("f1","defaultValue"))
### Select form
print(z.select("f2",[("o1","1"),("o2","2")],"o1"))
### Checkbox form
print("".join(z.checkbox("f3", [("o1","1"), ("o2","2")],["o1"])))
ZeppelinContext API
Python 解释器为你创建了一个变量 z,它代表 ZeppelinContext。用户可以使用它在 Zeppelin 中做更多有趣和复杂的事情。
| API | 描述 |
|---|---|
| z.put(key, value) | 将对象 value 与标识符 key 放入 Zeppelin 的分布式资源池中,
以便其他解释器可以使用它 |
| z.get(key) | 从Zeppelin的分布式资源池中获取标识符为key的对象 |
| z.remove(key) | 从Zeppelin的分布式资源池中移除标识符为key的对象 |
| z.getAsDataFrame(key) | 从Zeppelin的分布式资源池中获取标识符为key的对象,并将其转换为pandas dataframe。
分布式资源池中的对象必须是表类型,例如jdbc解释器的结果。
|
| z.angular(name, noteId = None, paragraphId = None) | 获取标识符为name的angular对象 |
| z.angularBind(name, value, noteId = None, paragraphId = None) | 将值绑定到标识符为name的angular对象 |
| z.angularUnbind(name, noteId = None) | 从标识符为name的angular对象中解绑值 |
| z.show(p) | 在 Zeppelin 中显示 Python 对象 p,如果它是 pandas 数据框,它将以 Zeppelin 的表格格式显示,
其他对象将被转换为字符串 |
| z.textbox(name, defaultValue="") | 创建带有默认值的动态表单文本框 name |
| z.select(name, options, defaultValue="") | 创建动态表单选择 name,带有选项和默认值。选项应该是一个元组列表(第一个元素是键,第二个元素是显示的值),例如 z.select("f2",[("o1","1"),("o2","2")],"o1") |
| z.checkbox(name, options, defaultChecked=[]) | 创建带有选项和默认选中状态的动态表单复选框 `name`。选项应该是一个元组列表(第一个元素是键,第二个元素是显示的值),例如 z.checkbox("f3", [("o1","1"), ("o2","2")],["o1"]) |
| z.noteTextbox(name, defaultValue="") | 创建笔记级别的动态表单文本框 |
| z.noteSelect(name, options, defaultValue="") | 创建笔记级别的动态表单选择 |
| z.noteCheckbox(name, options, defaultChecked=[]) | 创建笔记级别的动态表单复选框 |
| z.run(paragraphId) | 运行段落 |
| z.run(noteId, paragraphId) | 运行段落 |
| z.runNote(noteId) | 运行整个笔记 |
在yarn集群中运行Python解释器
Zeppelin 支持在 yarn 集群中运行解释器,这意味着 python 解释器可以在 yarn 容器中运行。 这可以实现更好的 python 解释器多租户,特别是当您已经有一个 hadoop yarn 集群时。
但在Yarn集群中运行Python有一个关键问题:如何在Yarn容器中管理Python环境。因为Hadoop Yarn集群是一个由许多节点组成的分布式集群环境,你的Python解释器可以在任何节点上启动。事先在每个节点上管理Python环境是不现实的。
因此,为了在yarn集群中运行python,我们建议您使用conda来管理您的python环境,Zeppelin可以将您的conda环境发送到yarn容器中,这样每个python解释器都可以拥有自己的python环境而不会相互影响。
Yarn集群中的Python解释器仅适用于IPython,因此请确保满足IPython的先决条件。因此,请确保在步骤1中包含以下包。
- python
- jupyter
- grpcio
- protobuf
步骤 1
我们建议您使用conda-pack来创建conda环境的存档,并将其发送到yarn容器中。否则,python解释器将使用yarn容器PATH中的python可执行文件。
这是一个yaml文件的示例,可用于创建一个包含Python 3和一些有用的Python库的conda环境。
- 为conda环境创建yaml文件,将以下内容写入文件
python_3_env.yml
name: python_3_env
channels:
- conda-forge
- defaults
dependencies:
- python=3.9
- jupyter
- grpcio
- protobuf
- pycodestyle
- numpy
- pandas
- scipy
- pandasql
- panel
- pyyaml
- seaborn
- plotnine
- hvplot
- intake
- intake-parquet
- intake-xarray
- altair
- vega_datasets
- pyarrow
conda env create -f python_3_env.yml
mamba env create -f python_3_env
- 使用
conda打包 conda 环境
conda pack -n python_3_env
步骤 2
指定以下属性以启用Python解释器的yarn模式。
%python.conf
zeppelin.interpreter.launcher yarn
zeppelin.yarn.dist.archives /home/hadoop/python_3_env.tar.gz#environment
zeppelin.interpreter.conda.env.name environment
将 zeppelin.interpreter.launcher 设置为 yarn 将在 yarn 集群中启动 python 解释器。
zeppelin.yarn.dist.archives 是在步骤1中创建的python conda环境tar文件。
这个tar文件将被发送到yarn容器,并在yarn容器的工作目录中解压。
environment 在 /home/hadoop/python_3.tar.gz#environment 中是解压后的文件夹名称。
此文件夹名称应与 zeppelin.interpreter.conda.env.name 相同。通常我们在这里将其命名为 environment。
Python 环境(用于非 yarn 模式下的普通 Python 解释器)
默认
默认情况下,PythonInterpreter 将使用 zeppelin.python 属性中定义的 python 命令来运行 python 进程。
解释器可以使用已经安装的所有模块(通过 pip、easy_install 等)
Conda
Conda 是一个用于 Python 的包管理系统和环境管理系统。
%python.conda 解释器允许你在不同环境之间切换。
用法
获取Conda信息:
%python.conda info列出Conda环境:
%python.conda env list创建一个conda环境:
%python.conda create --name [ENV NAME]激活一个环境(Python解释器将重新启动):
%python.conda activate [ENV NAME]停用
%python.conda deactivate获取当前环境中已安装的包列表
%python.conda list安装包
%python.conda install [PACKAGE NAME]卸载包
%python.conda uninstall [PACKAGE NAME]
Docker
%python.docker 解释器允许 PythonInterpreter 在指定的 docker 容器中创建 python 进程。
用法
激活一个环境
%python.docker activate [Repository] %python.docker activate [Repository:Tag] %python.docker activate [Image Id]停用
%python.docker deactivate
这是一个示例
# activate latest tensorflow image as a python environment
%python.docker activate gcr.io/tensorflow/tensorflow:latest
社区
Join our community 与其他人讨论。