笔者最近项目有点杂,什么都做,最近有涉及到spark的mllib上了。
本地没有spark环境,但需要调用spark的api。费了一番周折,记录下配置方法。
笔者安装的是Anaconda2,带有了全套的python环境。本地开发spark项目,还需要安装py4j和pyspark的lib.
pip install py4j
pip install pyspark
注意,只是下载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
下载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