python本地开发spark

笔者最近项目有点杂,什么都做,最近有涉及到spark的mllib上了。
本地没有spark环境,但需要调用spark的api。费了一番周折,记录下配置方法。

安装py4j和pyspark

笔者安装的是Anaconda2,带有了全套的python环境。本地开发spark项目,还需要安装py4j和pyspark的lib.

pip install py4j
pip install pyspark

下载spark

注意,只是下载spark而已,不需要安装。
地址是:https://spark.apache.org/downloads.html
下载 spark-2.2.0-bin-hadoop2.6.tgz
解压到 D:\software\spark-2.2.0-bin-hadoop2.6

配置环境变量

这一步比较重要。
主要的三个配置如下:

变量名:SPARK_HOME
变量值:D:\software\spark-2.2.0-bin-hadoop2.6

变量名:PYTHONPATH
变量值:%SPARK_HOME%\python;%SPARK_HOME%\python\lib\py4j-0.10.4-src.zip

变量名:Path
变量值:%SPARK_HOME%\bin

添加hadoop和java的依赖

下载winutils.exe.将其放在文件夹D:\software\spark-2.2.0-bin-hadoop2.6\HADOOP_HOME\bin下。
下载并安装java。

测试代码

# encoding: utf-8
from pyspark import SparkContext
import os
import sys
os.environ['SPARK_HOME'] = "D:\\software\\spark-2.2.0-bin-hadoop2.6"
os.environ['JAVA_HOME'] = "D:\\java\\jdk1.8"
sys.path.append("D:\\software\\spark-2.2.0-bin-hadoop2.6\\python")
os.environ['HADOOP_HOME'] = "D:\\software\\spark-2.2.0-bin-hadoop2.6\\HADOOP_HOME"

sc = SparkContext("local", "Simple App")
from numpy import array
from pyspark.mllib.clustering import BisectingKMeans
data = array([0.0,0.0, 1.0,1.0, 9.0,8.0, 8.0,9.0]).reshape(4, 2)
bskm = BisectingKMeans()
model = bskm.train(sc.parallelize(data, 2), k=4)
p = array([0.0, 0.0])
print model.predict(p)
print model.k
print model.computeCost(p)

注意,在代码中添加了四个环境变量。
HADOOP_HOME指定winutils.exe所在的文件夹的上一级目录(不含bin),否则会提示找不到winutils.exe。
上述代码能正常运行,说明配置无误。

运行结果可能提示:
Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
表示无法使用原生hadoop环境,使用编译好的java类,对测试无影响。

scala本地发开spark的配置环境和python相似。

贴一下其他的参考文档:
http://www.jianshu.com/p/5fc3470165b8
http://blog.csdn.net/hjxinkkl/article/details/57083549?winzoom=1

你可能感兴趣的:(python,spark)