python本地開發spark
阿新 • • 發佈:2019-02-14
筆者最近專案有點雜,什麼都做,最近有涉及到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相似。