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,如下图:

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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

其实我是真性情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值