最近项目涉及在spark分布式上做数据处理,需要先配置Spark+Python的本地Windows7(win10也一样的操作)机器上开发环境,所以写下本文备忘,同时希望对其他同学也有所帮助。
准备工作
spark版本更新比较频繁,也许你看到这篇文章,版本可能已经新增。
当前最新版本的spark为2.3.1,spark的运行需要JDK8以上,所以你需要首先安装jdk8并配置好环境变量。
Python3.6及pycharm的安装配置不在本文范围,没安装的同学请自行查看其它资料安装。
上述开发环境具备后还需要pip安装pyspark包。
pip install py4j
pip install pyspark
安装spark
1) 首先去官网下载对应的安装包,文件名含bin的为免安装版。
网址:http://spark.apache.org/downloads.html
如上图所示,Hadoop2.7就是需要的hadoop版本。
注意:在第2个下拉列表中选择了哪个版本的Hadoop就要下载相应版本的。
2)下载Hadoop
地址:http://hadoop.apache.org/releases.html#Download
左侧是版本,选择2.7.7,点击对应的binary进入下载页面。
3)配置环境变量
spark和Hadoop均为免安装版,直接解压到你的安装目录即可。
分别配置环境变量如下2个图所示。
上述配置完记得将HADOOP_HOME变量添加到Path环境变量值中,如下所示:
注意:HOME目录后面是没有分号的,PATH目录后面是有分号的。
4)测试是否配置成功。
在命令行输入pyspark,提示如下即配置成功。
测试程序
from pyspark import SparkContext
sc = SparkContext('local')
doc = sc.parallelize([['a','b','c'],['b','d','d']])
words = doc.flatMap(lambda d:d).distinct().collect()
word_dict = {w:i for w,i in zip(words,range(len(words)))}
word_dict_b = sc.broadcast(word_dict)
def wordCountPerDoc(d):
dict={}
wd = word_dict_b.value
for w in d:
#if dict.has_key(wd[w]):
if wd[w] in dict:
dict[wd[w]] +=1
else:
dict[wd[w]] = 1
return dict
print(doc.map(wordCountPerDoc).collect())
print("successful!")
出现如下提示表示运行成功,可以愉快地进行开发了!
注意事项
1)spark对依赖的所有工具的版本务必选对,否则可能报莫名其妙的错误。
请看网址:http://spark.apache.org/docs/latest/ 下面的说明。
2)环境变量一定要配置正确。
把握以上两点,环境搭建基本不会出错。
参考资料:
[1].http://spark.apache.org/
[2].https://blog.youkuaiyun.com/m0_37752104/article/details/80898967
[3].https://blog.youkuaiyun.com/u012882134/article/details/77893894