【博学谷学习记录】超强总结,用心分享|Spark的入门案例-WordCount案例
一、WordCount案例流程实现
二、WordCount案例代码实现
from pyspark import SparkContext, SparkConf
import os
os.environ['SPARK_HOME'] = '/export/server/spark'
os.environ['PYSPARK_PYTHON'] = '/root/anaconda3/bin/python3'
os.environ['PYSPARK_DRIVER_PYTHON'] = '/root/anaconda3/bin/python3'
if __name__ == '__main__':
print("pyspark的入门案例: wordcount")
conf = SparkConf().setAppName("wordcount").setMaster("local[*]")
sc = SparkContext(conf=conf)
"""
spark路径写法: 协议 + 路径
本地路径协议: file:///
HDFS路径协议: hdfs://host:port/
注意: 此处的路径, 不能写windows的路径地址, 因为连接的是远程环境, 所以这里的本地路径应该指的是远端的linux本地地址
"""
path = "file:///export/data/workspace/ky07_spark_parent/_01_spark_base/data/words.txt"
rdd_init = sc.textFile(name=path)
rdd_flatMap = rdd_init.flatMap(lambda line: line.split(' '))
rdd_map = rdd_flatMap.map(lambda word: (word, 1))
"""
lambda agg, curr: agg + curr
参数1(agg) : 表示的局部聚合的结果
参数2(curr): 表示的每一次遍历的value的值
规则: agg + curr 表示 将每一次遍历的value值不断的累加到agg上
比如说:
(hive,1),(hive,1),(hive,1),(hive,1),(hive,1),(hive,1)
reduceByKey: 根据key进行分组, 将相同组的value数据合并
hive: [1,1,1,1,1,1]
接下来执行lambda函数:
agg 初始值为 value的列表中第一个 也就是 1
curr: 依次从第二个1 往后遍历即可
规则:
相当于: 新的agg = 原有agg + curr
当遍历完成, agg的值即为当前这个组的最终的结果了
"""
rdd_res = rdd_map.reduceByKey(lambda agg, curr: agg + curr)
print(rdd_res.collect())
sc.stop();