05 RDD编程

一、词频统计:

  1. 读文本文件生成RDD lines
  2. 将一行一行的文本分割成单词 words flatmap()
  3. 全部转换为小写 lower()
  4. 去掉长度小于3的单词 filter()
  5. 去掉停用词
  6. 转换成键值对 map()
  7. 统计词频 reduceByKey()

       8.按字母顺序排序 sortBy(f)

       9.按词频排序 sortByKey()

 

       10.结果文件保存 saveAsTextFile(out_url)

11.词频结果可视化charts.WordCloud()

成功安装pyecharts

运行:from pyecharts.charts import WordCloud时报错,问题未解决

 

12.比较不同框架下(Python、MapReduce、Hive和Spark),实现词频统计思想与技术上的不同,各有什么优缺点.

python的优点:环境容易搭建

python的缺点:不能处理太大的数据

MapReduce的 优点:易于编程,有良好的扩展性和高容错性,适合PB级以上海量数据的离线处理

MapReduce 的缺点:不擅长实时计算,不擅长流式计算等

hive的优点:简单容易上手,可扩展,提供统一的元数据管理,延展性

hive的缺点:hive的HQL表达能力有限,hive的效率比较低,hive可控性差

Spark的优点:Spark可以直接对HDFS进行数据读写,支持YARN等部署模式,spark计算处理数据速度快

Spark的缺点:稳定性差,不能支持复杂的SQL统计

 

二、学生课程分数案例

  • 总共有多少学生?map(), distinct(), count()
  • 开设了多少门课程?
  • 每个学生选修了多少门课?map(), countByKey()
  • 每门课程有多少个学生选?map(), countByValue()
  • Webb选修了几门课?每门课多少分?filter(), map() RDD
  • Webb选修了几门课?每门课多少分?map(),lookup()  list
  • Webb的成绩按分数大小排序。filter(), map(), sortBy()
  • Webb的平均分。map(),lookup(),mean()

完成此次操作需要导入numpy库,执行如下操作:

sudo apt-get update
sudo apt-get install python-numpy

出现报错:

 

 

 解决方案:输入以下代码后即可成功安装numpy库

sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock

回到spark,执行import numpy as np时依然报错

 

 

 检查后发现是因为使用的python的问题,输入下列代码后就解决了:

sudo apt-get install python3-numpy

 

 

最终效果:

 

  • 生成(课程,分数)RDD,观察keys(),values()
  • 每个分数+5分。mapValues(func)
  • 求每门课的选修人数及所有人的总分。combineByKey()
  • 求每门课的选修人数及平均分,精确到2位小数。map(),round()
  • 求每门课的选修人数及平均分。用reduceByKey()实现,并比较与combineByKey()的异同。

 

posted @ 2021-04-17 13:09  约翰克里斯朵夫  阅读(91)  评论(0编辑  收藏  举报