Spark安裝
在學(xué)習(xí)spark之前,需要了解spark的運(yùn)行機(jī)制凭豪,推薦知乎一篇文章spark原理簡述
在部署spark之前,得先部署hadoop晒杈。在部署hadoop之前需要安裝jdk嫂伞。網(wǎng)盤里有相應(yīng)的安裝包(鏈接:https://pan.baidu.com/s/1288s7F7g_1caq4aXbjla-Q
提取碼:l7xp
復(fù)制這段內(nèi)容后打開百度網(wǎng)盤手機(jī)App,操作更方便哦)
1. 下載spark
- 官網(wǎng)下載拯钻,spark官網(wǎng)選擇合適的版本帖努。解壓壓縮包在本地的存放路徑不能帶空格。例如D:\spark
- 添加環(huán)境變量粪般,并在path內(nèi)添加
%SPARK_HOME%
#對應(yīng)路徑為spark解壓路徑D:\spark
%SPARK_HOME%\bin
%SPARK_HOME%\sbin
-
打開cmd拼余,輸入spark-shell.沒有問題的話出現(xiàn)下圖。
[
圖片上傳失敗...(image-e30e9-1603679334116)]
-
- 如果在pycharm中運(yùn)行spark,需要調(diào)用pyspark包亩歹,可以將D:\spark\python目錄下的pyspark文件夾拷貝到匙监,\python的安裝路徑\Lib\site_packages凡橱。(注:spark2.1版本和python3.6以及以上版本不兼容,可以和python3.5兼容亭姥。spark2.2版本可以和python3.6兼容稼钩。如果使用anaconda的,需要?jiǎng)?chuàng)建一個(gè)python3.5的環(huán)境达罗,conda create -n python35 python=3.5变抽,pyspark應(yīng)該拷貝到\anaconda路徑\env\python35\lib\sitepakages下。python運(yùn)行spark還有一個(gè)重要的包py4j氮块,可以pip list py4j绍载,也可以在通過sys.path.append("Spark/python/lib/py4j-0-9-src.zip"),添加py4j)
wordcount示例如下
- 如果在pycharm中運(yùn)行spark,需要調(diào)用pyspark包亩歹,可以將D:\spark\python目錄下的pyspark文件夾拷貝到匙监,\python的安裝路徑\Lib\site_packages凡橱。(注:spark2.1版本和python3.6以及以上版本不兼容,可以和python3.5兼容亭姥。spark2.2版本可以和python3.6兼容稼钩。如果使用anaconda的,需要?jiǎng)?chuàng)建一個(gè)python3.5的環(huán)境达罗,conda create -n python35 python=3.5变抽,pyspark應(yīng)該拷貝到\anaconda路徑\env\python35\lib\sitepakages下。python運(yùn)行spark還有一個(gè)重要的包py4j氮块,可以pip list py4j绍载,也可以在通過sys.path.append("Spark/python/lib/py4j-0-9-src.zip"),添加py4j)
#-*- coding:utf-8 -*-
'''
created on Mon Oct 10
@author:Hang li
'''
import sys
import os
from operator import add
from pyspark import SparkContext
from pyspark import SparkConf
os.environ["JAVA_HOME"]="D:\\java"
os.environ["SPARK_HOME"]="E:\\Spark"
sys.path.append("E:\\Spark\\python")
sys.path.append("E:\Spark\python\lib")
if __name__ == "__main__":
sc = SparkContext("local")
lines = sc.textFile("file:///D:\\pyspark_learn\\word.txt")
counts = lines.flatMap(lambda x: x.split(' ')) \
.map(lambda x: (x, 1)) \
.reduceByKey(add)
output = counts.collect()
for (word, count) in output:
print("%s: %i" % (word, count))
sc.stop()
- 運(yùn)行pyspark程序的時(shí)候滔蝉,會(huì)遇到py4j.protocol.Py4JJavaError:An error occurred while calling o20.partitions.錯(cuò)誤击儡。
原因spark默認(rèn)是去hdfs尋找文件,如果要想讀取本地文件蝠引,應(yīng)該在sc.testFile("路徑")阳谍,在路徑前面添加hdfs:///表示從hdfs文件系統(tǒng)上讀取文件。在路徑前面加上file:///E:\data\wordcount.txt螃概,表示從本地文件系統(tǒng)讀取文件矫夯。
- 運(yùn)行pyspark程序的時(shí)候滔蝉,會(huì)遇到py4j.protocol.Py4JJavaError:An error occurred while calling o20.partitions.錯(cuò)誤击儡。