PySpark 是 Spark on Zeppelin上Python语言的入口 , Spark Interpreter 内部会创建 Python Shell, 在这个Python Shell 里会创建 Spark的各种变量 (包括SparkContext,SQLContext,SparkSession 等等)。需要注意的是PySpark里的各种变量背后对应的Java变量都是Scala Shell那边创建的,也就是说PySpark 和 Spark Scala Shell是共享通过一个 SparkContext,SQLContext 以及 SparkSession。Zeppelin已经为你创建了下面3个变量 (不要自己再创建这些Environment)

  • sc (SparkContext),
  • sqlContext (SQLContext)
  • spark (SparkSession)
  • z (ZeppelinContext)

配置PySpark

使用PySpark非常简单,只需要在Spark的interpreter里做以下配置就可以

  • 设置 PYSPARK_PYTHON 和 PYSPARK_DRIVER_PYTHON 为python的可执行文件的路径(默认是用PATH里的python),因为有时候你的系统里可能安装了多个python版本,所以需要设置这两个配置(其实这两个配置是标准的 Spark 配置选项,不是zeppelin引入的配置选项)

使用PySpark

PySpark 在Zeppelin中有2种使用方式

  • %spark.pyspark
  • %spark.ipyspark

%spark.pyspark 最简单,除了上面的配置不需要做其他事情,但功能也相对比较弱,没法和jupyter里的python环境相比。%spark.ipyspark 功能就比较丰富,使用体验基本和jupyter里的python体验类似。

Python 段落执行顺序

同一时间只能有一个Python段落执行,Zeppelin是按照FIFO的顺序来执行Python段落。所以如果你的一个Python段落里正在跑一个Streaming作业的话,另外一个Scala段落只能等待(处于PENDING状态)。

IPySpark

%spark.ipyspark 功能比较强,和jupyter里的python环境类似,但是需要如下额外配置。

  • 如果你没有安装anaconda,那么需要安装下面3个python库

    1. pip install jupyter
    2. pip install grpcio
    3. pip install protobuf
  • 如果你已经安装了anaconda,那么只需要安装下面2个python库

    1. pip install grpcio
    2. pip install protobuf

当上面的这些库安装完之后,你就可以使用 %spark.ipyspark 了,除了基本的python执行环境外,还可以享用如下一些高级feature。需要注意的是,%spark.pyspark 会自动检查你是否已经安装了以上的ipyspark环境,如果已经安装了,那么就会自动启用ipyspark,也就是说 %spark.pyspark 会自动转化为 %spark.ipyspark。

1. 彩色高亮输出

%spark.pyspark 输出是纯文本文字,而%spark.ipyspark 输出是彩色的,更加醒目,如下图
image.png

2. IPython Magic语法糖支持

IPython语法糖是指以%开头的特殊语法,如下图所示

  1. %spark.ipyspark
  2. range?
  3. #timeit
  4. %timeit range(100)

3. Matplotlib 支持

Matplotlib的用法和在Jupyter变得一模一样,如下图
image.png

4. 更多Python可视化库的支持

除了Matplotlib之外,还能支持更多其他Python的可视化库,比如Bokeh, HvPlot, Pandas,Seaborn 等等,具体可以参考每个Python库的官方文档,在Zeppelin无需任何其他配置,按照官方用法就可以。Zeppelin自带的教程里有常见的Python可视化库的使用教程 Python Tutorial/2. IPython Visualization Tutorial

5. 更好的Code Completion支持

和Scala Shell的Code Completion一样,你只要按tab键就会显示当前环境下的code completion,比如
image.png

6. 运行Shell 命令

和Jupyter一样,你可以用下面这种方式来运行Shell 命令
image.png

7. 动态创建 Python 环境

调整Python环境对于用户来说是一个很普遍的需求,但是在hadoop集群的每个机器上都管理Python环境不太实际,Zeppelin提供了一个用conda的解决方案来动态选择Python runtime环境,具体可以参考Zeppelin自带的教程 Spark Tutorial/8. PySpark Conda Env in Yarn Mode

公众号 钉钉群

image.png image.png