PySpark在windows下的安装及使用

2023-05-08 21:41:07 浏览数 (1)

一、jdk安装

  • 必须要求为jdk1.8版本

JDK下载后环境变量配置

新增系统变量JAVA_HOME

Path新增

测试是否安装成功:javac -version(注意是javac不是java)

二、spark安装

官网下载http://spark.apache.org/downloads.html,遇到加载不了选项框的情况可以尝试用手机打开网址获取下载链接后下载

直接解压,注意路径不要有空格

环境变量配置

Path配置

测试安装情况,cmd输入spark-shell

出现Welcome to Spark 表示安装成功,如果没有装Hadoop,则会出现上面一个报错,但不影响Spark的安装

三、hadoop安装

官网下载https://hadoop.apache.org/releases.html

解压后配置相关环境

系统变量新增HADOOP_HOME

Path配置

四、winutils安装

windows环境下还需要装个东西来替换掉hadoop里的bin文件才行

下载地址:https://github.com/steveloughran/winutils

使用了和hadoop相近的版本,测试没问题

直接复制替换

再次测试:spark-shell

五、pyspark使用

代码语言:javascript复制
# 包的安装
pip install pyspark -i https://pypi.doubanio.com/simple/

pyspark测试使用

代码语言:javascript复制
from pyspark import SparkConf
from pyspark.sql import SparkSession
import traceback


appname = "test"  # 任务名称
master = "local"  # 单机模式设置'''
local: 所有计算都运行在一个线程当中,没有任何并行计算,通常我们在本机执行一些测试代码,或者练手,就用这种模式。
local[K]: 指定使用几个线程来运行计算,比如local[4]就是运行4个worker线程。通常我们的cpu有几个core,就指定几个线程,最大化利用cpu的计算能力
local[*]: 这种模式直接帮你按照cpu最多cores来设置线程数了。
'''
spark_driver_host = "10.0.0.248"


try:
    # conf = SparkConf().setAppName(appname).setMaster(master).set("spark.driver.host", spark_driver_host) # 集群
    conf = SparkConf().setAppName(appname).setMaster(master)  # 本地
    spark = SparkSession.builder.config(conf=conf).getOrCreate()
    sc = spark.sparkContext
    words = sc.parallelize(
        ["scala",
         "java",
         "hadoop",
         "spark",
         "akka",
         "spark vs hadoop",
         "pyspark",
         "pyspark and spark"
         ])
    counts = words.count()
    print("Number of elements in RDD is %i" % counts)
    sc.stop()
    print('计算成功!')
except:
    sc.stop()
    traceback.print_exc()  # 返回出错信息
    print('连接出错!')

如果出现报错为:

py4j.protocol.Py4JError: org.apache.spark.api.python.PythonUtils.isEncryptionEnabled does not exist in the JVM

在连接spark前增加spark的查找(直接放在代码最顶上)

代码语言:javascript复制
import findspark
findspark.init()

测试结果:

代码语言:javascript复制
F:Anaconda3python.exe D:/PycharmProjects/demo_pyspark.py
        
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).20/08/27 16:17:44 WARN Utils: Service 'SparkUI' could not bind on port 4040. Attempting port 4041.
Number of elements in RDD is 8
计算成功!


Process finished with exit code 0

注:pyspark保存文件的时候目录不能存在!!要不然会报错说目录已经存在,要记得把文件夹都删掉!

0 人点赞