Spark 的 python 编程环境
spark编程环境
spark 可以独立安装使用,也可以和 hadoop 一起安装使用。在安装 spark 之前,首先确保你的电脑上已经安装了 java 8
或者更高的版本。
spark 安装
访问spark 下载页面,并选择最新版本的 spark 直接下载,当前的最新版本是 2.4.2 。下载好之后需要解压缩到安装文件夹中,看自己的喜好,我们是安装到了 /opt
目录下。
tar -xzf spark-2.4.2-bin-hadoop2.7.tgz mv spark-2.4.2-bin-hadoop2.7 /opt/spark-2.4.2
为了能在终端中直接打开 spark 的 shell
环境,需要配置相应的环境变量。这里我由于使用的是 zsh
,所以需要配置环境到 ~/.zshrc
中。
没有安装 zsh 的可以配置到
~/.bashrc
中
# 编辑 zshrc 文件 sudo gedit ~/.zshrc # 增加以下内容: export spark_home=/opt/spark-2.4.2 export path=$spark_home/bin:$path export pythonpath=$spark_home/python:$spark_home/python/lib/py4j-0.10.4-src.zip:$pythonpath
配置完成后,在 shell
中输入 spark-shell
或者 pyspark
就可以进入到 spark 的交互式编程环境中,前者是进入 scala
交互式环境,后者是进入 python
交互式环境。
配置 python 编程环境
在这里介绍两种编程环境,jupyter
和 visual studio code
。前者方便进行交互式编程,后者方便最终的集成式开发。
pyspark in jupyter
首先介绍如何在 jupyter
中使用 spark,注意这里 jupyter notebook 和 jupyter lab 是通用的方式,此处以 jupyter lab 中的配置为例:
在 jupyter lab 中使用 pyspark 存在两种方法:
- 配置 pyspark 的启动器为 jupyter lab,运行
pyspark
将自动打开一个 jupyter lab; - 打开一个正常的 jupyter lab,并使用
findspark
包来加载 pyspark。
第一个选项更快,但特定于jupyter笔记本,第二个选项是一个更广泛的方法,使pyspark在你任意喜欢的ide中都可用,强烈推荐第二种方法。
方法一:配置 pyspark 启动器
更新 pyspark 启动器的环境变量,继续在 ~/.zshrc
文件中增加以下内容:
export pyspark_driver_python=jupyter export pyspark_driver_python_opts='lab'
如果要使用 jupyter notebook,则将第二个参数的值改为 notebook
刷新环境变量或者重启机器,并执行 pyspark
命令,将直接打开一个启动了 spark 的 jupyter lab。
pyspark
方法二:使用 findspark 包
在 jupyter lab 中使用 pyspark 还有另一种更通用的方法:使用 findspark
包在代码中提供 spark 上下文环境。
findspark
包不是特定于 jupyter lab 的,您也可以其它的 ide 中使用该方法,因此这种方法更通用,也更推荐该方法。
首先安装 findspark:
pip install findspark
之后打开一个 jupyter lab,我们在进行 spark 编程时,需要先导入 findspark 包,示例如下:
# 导入 findspark 并初始化 import findspark findspark.init() from pyspark import sparkconf, sparkcontext import random # 配置 spark conf = sparkconf().setmaster("local[*]").setappname("pi") # 利用上下文启动 spark sc = sparkcontext(conf=conf) num_samples = 100000000 def inside(p): x, y = random.random(), random.random() return x*x + y*y < 1 count = sc.parallelize(range(0, num_samples)).filter(inside).count() pi = 4 * count / num_samples print(pi) sc.stop()
运行示例:
pyspark in vscode
visual studio code
作为一个优秀的编辑器,对于 python
开发十分便利。这里首先推荐个人常用的一些插件:
- python:必装的插件,提供了python语言支持;
- code runner:支持运行文件中的某些片段;
此外,在 vscode
上使用 spark 就不需要使用 findspark
包了,可以直接进行编程:
from pyspark import sparkcontext, sparkconf conf = sparkconf().setmaster("local[*]").setappname("test") sc = sparkcontext(conf=conf) logfile = "file:///opt/spark-2.4.2/readme.md" logdata = sc.textfile(logfile, 2).cache() numas = logdata.filter(lambda line: 'a' in line).count() numbs = logdata.filter(lambda line: 'b' in line).count() print("lines with a: {0}, lines with b:{1}".format(numas, numbs))