PYSpark环境构建总结

一、需要的软件及版本

    • jdk版本:1.8
    • spark 版本:-2.4.0-bin-hadoop2.7
    • scala版本:2.12 (可选)
    • hadoop版本:2.7 ====另外需要
    • python版本:3.7 或者anaconda
    • pyspark以及py4j
    • pycharm的安装,暂时用社区版吧

二、环境变量配置:

JAVA_HOME=C:\gyhProgramFiles\jdk\jdk8

SPARK_HOME=C:\gyhProgramFiles\spark-2.4.0-bin-hadoop2.7

HADOOP_HOME=C:\gyhProgramFiles\hadoop-2.7.7

SCALA_HOME=C:\gyhProgramFiles\scala-2.12.8

PYTHON_PATH=%SPARK_HOME%\python;%SPARK_HOME%\python\lib\py4j-0.10.7-src.zip

PATH=.;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%SPARK_HOME%;%SPARK_HOME%\bin;%SPARK_HOME%\sbin;%SCALA_HOME%\bin;%HADOOP_HOME%\bin;%HADOOP_HOME%\sbin;C:\gyhProgramFiles\Python\Python37\;C:\gyhProgramFiles\Python\Python37\Scripts\;%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;%PyCharm Community Edition%;

三、安装注意事项:

1、spark依赖scala,scala依赖jdk,所以scala和jdk都要安装;jdk尽量用1.8的。别用11;

2、spark和hadoop的版本要注意尽量匹配;

3、spark启动spark-shell的时候会报错winutil.exe的错误,解决方法是在安装完hadoop后下载相关文件替换hadoop下面的bin目录里:

4、pyspark和py4j是否需要单独安装??有的文件说只要安装完spark了,并配置了PATH=%SPARK_HOME%;%SPARK_HOME%\bin;%SPARK_HOME%\sbin; 了就可以用pyspark了。但大多数的帖子里是说要单独安装:   pip3 install py4j --proxy=proxy.cmcc:8080      pip3 install pyspark --proxy=proxy.cmcc:8080  

另外:py4j也可以:在pycharm上的project interpreter上下载py4j 

5、注意:spark要链接mysql,需要把 链接jar包  放到spark/jars 目录底下。在spark_en.sh里面配置的不起作用。

6、以上安装后用了在pycharm里面调试程序时候,不需要事先手动启动spark,直接运行程序即可。

四、pycharm集成spark的操作步骤

第一个地方:打开RUN->Edit Configurations ;添加  SPARK_HOME和PYTHONPATH等;

SPARK_HOME为spark的绝对路径;PYTHONPATH为spark的绝对路径下的python目录;

即:SPARK_HOME=C:\gyhProgramFiles\spark-2.4.0-bin-hadoop2.7

PYTHONPATH=C:\gyhProgramFiles\spark-2.4.0-bin-hadoop2.7\python

PYSpark环境构建总结

另外JAVA_HOME不设置的话会报错:Java not found and JAVA_HOME environment variable is not set.

HADOOP_HOME不设置的话会报错:Failed to locate the winutils binary in the hadoop binary path

 

第二个地方:在setting==》perferences中的project structure中点击右边的“add content root”,添加py4j-some-version.zip和pyspark.zip的路径(这两个文件都在Spark中的python/lib文件夹下)

有很多帖子没有执行这个操作就可以,但我必须这样操作才行。

PYSpark环境构建总结

 

第三个地方:拷贝spark下的两个目录到python目录下,据说这样能实现在pycharm里面的代码自动补全功能

PYSpark环境构建总结

效果:

PYSpark环境构建总结

 

五、测试

from __future__ import print_function

from pyspark.sql import SparkSession


def json_dataset_example(spark):
    sc = spark.sparkContext
    path = "C://people.json"
    peopleDF = spark.read.json(path)
    peopleDF.printSchema()
    peopleDF.createOrReplaceTempView("people")
    teenagerNamesDF = spark.sql("SELECT name FROM people WHERE age BETWEEN 13 AND 19")
    teenagerNamesDF.show()

def jdbc_dataset_example(spark):
    myDF = spark.read \
        .format("jdbc") \
        .option("url", "jdbc:mysql://10.1.4.64:3306/myd?characterEncoding=gbk") \
        .option("dbtable", "gyh_menzhen") \
        .option("user", "root") \
        .option("password", "zhaowei") \
        .load()

    myDF.createOrReplaceTempView("gyh_menzhen")
    spark.sql("select count(*) from gyh_menzhen ").show()

if __name__ == "__main__":
    spark = SparkSession.builder.appName("Python Spark SQL data source example").getOrCreate()
    ##json_dataset_example(spark)  ##############################################################
这里测试成功
   
jdbc_dataset_example(spark)  ##################################这里连接数据库测试报错:py4j.protocol.Py4JJavaError: An error occurred while calling o32.load.

: java.sql.SQLException: No suitable driver
    spark.stop()

####################测试证明这个错误需要把 mysql的链接jar文件放到  spark安装目录下的jars文件夹下面。像有的帖子说在spark_env.sh里面加入export SPARK_CLASSPATH=C:\gyhProgramFiles\mysql-connector-java-5.1.35.jar;$SPARK_CLASSPATH  好像从没有成功过。