当前位置: 移动技术网 > IT编程>数据库>其他数据库 > Spark 的 python 编程环境

Spark 的 python 编程环境

2019年06月12日  | 移动技术网IT编程  | 我要评论

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 编程环境

在这里介绍两种编程环境,jupytervisual 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

uploading-image-247799.png

方法二:使用 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()

运行示例

uploading-image-293957.png


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))

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网