最近想整理整理pyspark的环境,由于本人是windows本,所以之前都是用winutils解决跨平台问题,最近想着我能不能直接使用服务器上的pyspark环境啊,所以在网上搜索了一番加上测试了一趟,捋了捋流程发出来记一下,mark!
1. 完成SSH免密登录的Linux服务器一台和Windows笔记本一台(理论上只要免密了都适用)
2. Linux服务器本地存在正常可使用的pyspark环境
3. 可能有同学是anaconda环境,这里备注一下,只需要在对应位置的python路径变更一下即可(我就是anaconda,所以mark一下)
4. 测试代码块
from pyspark import SparkContext
from pyspark import SparkConf
conf = SparkConf().setMaster("local").setAppName("test")
sc = SparkContext(conf=conf)
textFile = sc.textFile("file:///opt/personal/spark-wordcount/spark-learn/resources").cache()
wordCount = textFile.flatMap(lambda line: line.split(" ")).map(lambda word: (word, 1)).reduceByKey(lambda a, b: a + b)
wordCount.foreach(print)
sc.stop()
1. pycharm新建项目,新建项目环节可以使用原有的python环境即可(因为这里不是重点,在后续的操作中都会覆盖使用线上服务器中的python环境)
2. File ——> Settings ——> Python Interpreter,在Project Interpreter后缀点设置——>add新增一个python地址,而后选择SSH连接方式,使用你服务器对应的HOST和Username,这里我就不赘述了。
3.选择你要在服务器上使用的python.exe对应的地址(当然Linux中不会有exe文件,这里主要为了体现要到含有python执行程序的目录结构中),此外snyc folders地址,相信英语好的同学都已经知道了,对!就是同步位置。。。可以将我们在Windows - pycharm中创建的python项目的目录结构同步到Linux的对应目录上。
ps:anaconda对应的python环境地址在……/anaconda3/envs/python3/bin/python3(省略号自己填充对应服务器安装前缀即可)
点击Finish和Settings中的的时候会提示是否使用目前的python配置取代原有的python配置,当然!这是我做这件事的初衷啊。。。
4. 在都点击完后,你会发现你的sync folders目录中就有了我们在Windows pycharm中的对应目录及文件,如图:
5. 测试——>报错!
Python in worker has different version 3.8 than that in driver 3.6, PySpark cannot run with different minor versions. Please check environment variables PYSPARK_PYTHON and PYSPARK_DRIVER_PYTHON are correctly set.
也就是我使用了不同的python版本,对于我而言是我的anaconda默认是3.8,应用程序或我本地使用的是3.6,那么需要PYSPARK_PYTHON参数或PYSPARK_DRIVER_PYTHON参数。
在Edit Configuration——>Configuration——>Environment——>Environment Variables中新增PYSPARK_PYTHON参数,使用的就是我们在服务器上要使用的相同版本的python环境,我这里是anaconda的虚拟python3环境,使用的也是python3.6,所以,再试!
6. 测试——>成功!