1. 程式人生 > >python本地開發spark

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相似。