Python & Spark学习笔记系列 【第二章】例子:单词统计+文件存储

一般Spark上来好像都是单词统计,这里我也写一个,之后再带上点其他的函数,Spark和Python语法是真的难理解,这里我把我的理解都写在程序代码注解上了,直接上代码

from pyspark import SparkContext, SparkConf
import os

# 没有这句会报错
os.environ['JAVA_HOME'] = 'D:\Java\jdk1.8.0_92'
# 没有这句最后一行代码访问HDFS会报错,提示本地电脑上的用户没有hadoop权限,这句的意思我理解就是使用hdfs用户去访问hadoop环境
os.environ['HADOOP_USER_NAME'] = 'hdfs'

conf = SparkConf().setMaster("local").setAppName("test_app1")
sc = SparkContext(conf=conf)
rdd = sc.textFile("C:\\123.txt")  # 读取文件
# x相当于是每行的输入返回值的结构是['word1','word2']
words = rdd.flatMap(lambda x: x.split(" "))
# x是输入的每个word,返回的是个map结构,在python里应该叫元组,返回结果是[(word1,1),(word2,1),(word1,1)]
count = words.map(lambda x: (x, 1))
# 这个就不好理解了,reduceByKey,意思是根据元组的key进行聚合,这里的x相当于相同的key里的第一条记录的value,y相当于相同key里的第而条记录的value
words_count = count.reduceByKey(lambda x, y: x + y)  # 出来的结果[(word1,20),(word2,15)],是相同的key,后边的1累加后的结果
# 这里是我对统计完的累加结果再进行一次排序,我希望最多的结果排,第一个参数是要比较的对面相当于是(word1,20)这个元组,比较的是20这个数字所以是x[1],False代表是倒序
result = words_count.sortBy(lambda x: x[1], False)
print(result.collect())  # 排序之后输出,Spark特别强调过,数据过多的时候不能使用collect,会内存溢出的
result.saveAsTextFile("hdfs://10.10.171.168:8020/lwbtest/wordcount")  # 写入HDFS上

输出完之后会在HDFS上目录下看到写入的文件part-0000,如下图:

Python & Spark学习笔记系列 【第二章】例子:单词统计+文件存储_第1张图片

下载之后用文本打开的内容如下,

Python & Spark学习笔记系列 【第二章】例子:单词统计+文件存储_第2张图片

你可能感兴趣的:(Spark)