pip install pyspark pyhive pymysql jieba --user -i https://pypi.tuna.tsinghua.edu.cn/simple
1、SparkContext
创建SparkConf对象
基于SparkConf对象,创建SparkContext对象
# coding:utf8
from pyspark import SparkConf, SparkContext
import os
os.environ['PYSPARK_PYTHON']="D:\\Anaconda\\python.exe"(如果在本地,加上这一行)
# 创建 SparkConf 对象
conf = SparkConf().setMaster("local[*]").setAppName("WordCountHelloWorld")
# 创建 SparkContext 对象
sc = SparkContext(conf=conf)
# 读取文件
lines = sc.textFile("../data/input/words.txt")
# 切分单词并统计
words_rdd=lines.flatMap(lambda line:line.split(" "))
#将单词转换为元组对象,key是单词,value是1
words_with_one_rdd=words_rdd.map(lambda x:(x,1))
#将元组的value按照key来分类,对所有value执行聚合操作
result_rdd=words_with_one_rdd.reduceByKey(lambda a,b:a+b)
#通过collect方法收集RDD的数据打印输出结果
print(result_rdd.collect())
# # 输出结果
# for (word, count) in wordCounts.collect():
# print(f"{word}: {count}")
#
# # 停止 SparkContext 对象
# sc.stop()
分布式代码执行分析
SparkContext对象的构建以及Spark程序的退出,由Driver负责执行(非数据处理的部分由Driver工作)
具体的数据处理步骤RDD,由Executor执行(数据处理的部分由Executor工作)
PySpark宗旨是在不破坏Spark已有的运行时架构,在Spark架构外层包装一层Python API,借助Py4j实现Python和Java的交互,进而实现通过Python编写Spark应用程序,其运行时架构如下图所示。
Driver由JVM执行 Executor由JVM命令转发。到底层的python解释器进行工作
2、提交到服务器运行
在代码中尽量不要设置master。如果设置以代码为准,spark-submit工具的设置就无效了
Spark本地模式
(base) [smith@hadoop102 ~]$ /opt/module/spark/bin/spark-submit --master local[*] /home/smith/helloworld.py
Spark yarn模式
(base) [smith@hadoop102 ~]$ /opt/module/spark/bin/spark-submit --master yarn /home/smith/helloworld.py