适用于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 BasicPython 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
  • 通过此yml文件使用condamamba创建conda环境
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 与其他人讨论。