前言:Spark数据源兼容性特别优秀,能够完美使用MySQL、HDFS、Excel甚至CSV文件,在注重分析过程的业务场景中能跳过ETL流程直接进入分析阶段,在“小而美”(指数据量较小且价值较高)的业务场景下提高分析效率,因此本文将介绍Windows环境下的PySpark使用经验。
环境一览:
操作系统 | 数据库 | Python | Java | Scala | Hadoop | Spark |
---|---|---|---|---|---|---|
Windows 11 | MariaDB 10.9 | 3.9 | jdk-8u351 | 2.13 | 3.2.2 | 3.0.3 |
1、安装MariaDB
MySQL被Oracle收购后,继续使用MySQL有商标侵权的风险,因此这里使用有MySQL衍生的MariaDB
MariaDB环境部署比较简单,安装时记住root用户的密码即可,这里不再赘述
下载地址:Download MariaDB Server - MariaDB.org
2、安装Python
推荐安装Python 3.7以上版本,此处以3.9为例,建议安装到C:\env
安装过程比较简单,无脑按下一步即可,这里不再赘述。
下载地址:https://www.python.org/ftp/python/3.9.2/python-3.9.2rc1-amd64.exe
3、安装Java
PySpark的程序通过Py4J提交到JVM运行,所以电脑里要有JDK环境,这里推荐使用 JDK_8u351,建议安装到C:\env
安装过程比较简单,无脑按下一步即可,这里不再赘述
下载地址:https://www.oracle.com/java/technologies/downloads/#license-lightbox
4、安装Scala
Spark的底层由Scala构建,启动spark-shell需要Scala环境,这里推荐Scala 2.13版本,建议安装到C:\env
安装过程比较简单,无脑按下一步即可,这里不再赘述。
下载地址:https://downloads.lightbend.com/scala/2.13.10/scala-2.13.10.msi
5、安装Hadoop(重要!)
这里跟别的教程做一些不同的事情,我们的出发点是在Windows环境下跨过ETL流程直接分析数据,因此不需要搭建本地集群启动本地HDFS,只需要让PyCharm的PySpark运行起来即可。所以,Hadoop环境只需要一个带有winutils.exe的Hadoop bin即可,这个东西在GitHub上已经有大佬给我们写好,搬下来使用即可
GitHub地址:cdarlint/winutils: winutils.exe hadoop.dll and hdfs.dll binaries for hadoop windows (github.com)
点击右上角的Code按钮,点击Local,再点击Download ZIP,下载整个代码项目
打开压缩包发现所有版本的Hadoop都下载了,我们只要把hadoop-3.2.2解压出来就行,按照我的习惯,解压到C:\env\hadoop-3.2.2
Hadoop目录添加到环境变量,变量名=HADOOP_HOME,变量值=C:\env\hadoop-3.2.2
在Path变量里添加%HADOOP_HOME%\bin
6、安装Spark(重要!)
Spark使用spark-3.0.3-bin-hadoop3.2版本(因为其他版本我没试过),否则会有莫名其妙的报错
下载地址:https://archive.apache.org/dist/spark/spark-3.0.3/spark-3.0.3-bin-hadoop3.2.tgz
下载好后打开到最里面的文件夹,解压缩到C:\env
Saprk目录添加环境变量,变量名=SPARK_HOME,变量值=C:\env\spark-3.0.3-bin-hadoop3.2
在Path变量里添加%SPARK_HOME%\bin
spark-3.0.3-bin-hadoop3.2\python\lib目录下有两个zip包,分别为py4j-xxx-src.zip和pyspark.zip,将这两个zip包解压缩至python39\Lib\site-packages目录下,使Python能读取这两个包
将PYTHONPATH添加到环境变量,变量名=PYTHONPATH,变量值应有两个,其一为C:\env\spark-3.0.3-bin-hadoop3.2\python,其二为C:\env\Python39(就是步骤2中安装Python的路径)
将%PYTHONPATH%添加到Path变量里
7、检查环境
1)环境变量中应有以下内容:
变量名 | 变量值 |
---|---|
JAVA_HOME | C:\env\Java\jdk1.8.0_351 |
SCALA_HOME | C:\env\scala |
HADOOP_HOME | C:\env\hadoop-3.2.2 |
SPARK_HOME | C:\env\spark-3.0.3-bin-hadoop3.2 |
PYTHONPATH | C:\env\spark-3.0.3-bin-hadoop3.2\python;C:\env\Python39 |
2)Path中应有以下变量值
变量值 |
---|
%SPARK_HOME%\bin |
%SCALA_HOME%\bin |
%HADOOP_HOME%\bin |
%PYTHONPATH% |
%JAVA_HOME%\bin |
8、运行项目
1)安装PyCharm,克隆我的GitHub项目
GitHub地址:Zeratur/test_project (github.com)
2)将项目lib目录中的MariaDB驱动 mariadb-java-client-3.1.0.jar 复制粘贴到 C:\env\spark-3.0.3-bin-hadoop3.2\jars 目录下
3)把config\config.ini 中的配置参数修改成你本机MariaDB的参数。一般改password和database即可
4)安装依赖包:
pip install pandas
pip install pymsql
这两个包是项目的依赖程序,需要安装,不然会报错
目前项目支持csv、xlsx和MySQL三个数据源,MySQL的配置可以再config.ini里更改,csv和xlsx输出的结果文件存在output文件夹,读取数据的方法写在utils\dataUtils.py里,后续再添加其他数据源。
如有问题,欢迎探讨。