一、前言介绍
1、Spark是什么
2、Python On Spark
3、PySpark
4、小结
二、基础准备
1、PySpark库的安装
2、构建PySpark执行环境入口对象
3、PySpark的编程模型
3、小结
三、数据输入
1、RDD对象
(1)Python数据容器转RDD对象
代码演示:
(2)读取文件转RDD对象
代码演示:
2、小结
四、数据计算
1、RDD的map方法
代码演示:
或者使用匿名函数 lambda:
会报错,因为PySpark找不到Python解释器在哪里:
在前面加上如下代码,告诉spark运行时在哪里找到python解释器:
运行成功:
链式调用:每次计算返回的结果都是同一个对象 rdd
运行成功:
小结:
2、RDD的flatMap算子
代码演示:
from pyspark import SparkConf,SparkContext import os os.environ["PYSPARK_PYTHON"]="D:\SMJ\Documents\下载\Python\python3.11.5\python.exe" conf=SparkConf().setMaster("local[*]").setAppName("test_flatMap") sc=SparkContext(conf=conf) rdd=sc.parallelize(["app opp python","xiaohong min ass","asd hhj sd"]) print(rdd.flatMap(lambda x:x.split(" ")).collect()) sc.stop()
运行结果:
小结:
3、RDD的reduceByKey算子
代码演示:
from pyspark import SparkConf,SparkContext import os os.environ["PYSPARK_PYTHON"]="D:\SMJ\Documents\下载\Python\python3.11.5\python.exe" conf=SparkConf().setMaster("local[*]").setAppName("test_reduceByKey") sc=SparkContext(conf=conf) rdd=sc.parallelize([("a",1),("a",2),("b",1),("b",1),("b",2)]) print(rdd.reduceByKey(lambda a,b:a+b).collect()) sc.stop()
运行结果:
小结:
4、练习案例
代码演示:
from pyspark import SparkConf,SparkContext import os os.environ["PYSPARK_PYTHON"]="D:\SMJ\Documents\下载\Python\python3.11.5\python.exe" conf=SparkConf().setMaster("local[*]").setAppName("test_spark_lianxi") sc=SparkContext(conf=conf) rdd=sc.textFile("d:/a.txt") rdd1=rdd.flatMap(lambda x:x.split(" ")) rdd2=rdd1.map(lambda x:(x,1)) print(rdd2.reduceByKey(lambda x,y:x+y).collect()) sc.stop()
运行结果:
5、RDD的Filter方法
代码演示:
from pyspark import SparkConf,SparkContext import os os.environ["PYSPARK_PYTHON"]="D:\SMJ\Documents\下载\Python\python3.11.5\python.exe" conf=SparkConf().setMaster("local[*]").setAppName("test_Filter") sc=SparkContext(conf=conf) rdd=sc.parallelize([1,2,3,4,5]) print(rdd.filter(lambda x:x%2==0).collect()) sc.stop()
运行结果:
小结:
6、RDD的distinct算子
代码演示:
from pyspark import SparkConf,SparkContext import os os.environ["PYSPARK_PYTHON"]="D:\SMJ\Documents\下载\Python\python3.11.5\python.exe" conf=SparkConf().setMaster("local[*]").setAppName("test_distinct") sc=SparkContext(conf=conf) rdd=sc.parallelize([1,2,3,1,3,3,4,5,3,2,4,21]) print(rdd.distinct().collect()) sc.stop()
运行结果:
小结:
7、RDD的sortBy算子
代码演示:
from pyspark import SparkConf,SparkContext import os os.environ["PYSPARK_PYTHON"]="D:\SMJ\Documents\下载\Python\python3.11.5\python.exe" conf=SparkConf().setMaster("local[*]").setAppName("test_spark_lianxi") sc=SparkContext(conf=conf) rdd=sc.textFile("d:/a.txt") rdd1=rdd.flatMap(lambda x:x.split(" ")) rdd2=rdd1.map(lambda x:(x,1)) rdd3=rdd2.reduceByKey(lambda x,y:x+y).sortBy(lambda x:x[1],ascending=False,numPartitions=1) print(rdd3.collect()) sc.stop()
运行结果:
小结:
8、练习案例
代码演示1:
运行结果1:
代码演示2:
运行结果2:
代码演示3:
运行结果3:
五、数据输出
1、输出为python对象
(1)collect()
代码演示:
运行结果:
(2)reduce()
代码演示:
运行结果:
(3)take()
代码演示:
运行结果:
(4)count()
代码演示:
运行结果:
(5)小结
2、输出到文件中
(1)saveAsTextFile()
报错:
(2)配置依赖
(3)修改RDD分区
运行成功:
或者:
运行成功:
(4)小结
六、综合案例:搜索引擎日志分析
代码演示1:
运行结果1:
代码演示2:
运行结果2:
代码演示3:
运行结果3:
代码演示4:
运行结果4: