培训系列5--spark 的 RDD 的 reduce方法使用

1.spark-shell环境下准备数据

val collegesRdd= sc.textFile("/user/hdfs/CollegeNavigator.csv")
val header= collegesRdd.first

val headerlessRdd= collegesRdd.filter( line=>{ line!= header } )

2.准备学生数的map

val countStuMap= headerlessRdd.map(line=>{
val strCount=line.split("\",\"")(7)
if (strCount.length()>0) strCount.toInt
else 0
})

countStuMap.take(10).foreach(println)

在map函数里面增加if else语句主要是数据中“”的空字符串,如果直接转换int会报错

3.写r求学生总数的reduce rdd

val totalcount=countStuMap.reduce((stuCount1,stuCount2)=>stuCount1+stuCount2)

得到所有学校的学生综述

3.写求学校类型的总数

scala> header
res12: String = "Name","Address","Website","Type","Awards offered","Campus setting","Campus housing","Student population","Undergraduate students","Graduation Rate","Transfer-Out Rate","Cohort Year *","Net Price **","Largest Program","IPEDS ID","OPE ID"

scala> val typeMap= headerlessRdd.map(line=>{
| val strtype=line.split("\",\"")(3)
| strtype
| })
typeMap: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[13] at map at <console>:30

scala> typeMap.count
res13: Long = 503

scala> typeMap.distinct.count
res14: Long = 5

一个rdd中如果有重复的值,可以直接通过distinct来去重。

4.求平均学校学生人数

求学校总数,可以通过headerlessRdd.count来获得,也可以用map reduce来做,map和reduce可以连写,

val collegeCount=headerlessRdd.map(line=>1).reduce((line1,line2)=>line1+line2)

totalcount/collegeCount

这里的数据量比表少,如果数据量比较多,会发发现平均值不对。

主要是由于计算totalcount的时候使用了int类型,int类型的最大值是有限的,实际计算中要把toInt  最好换成 toLong

if (strCount.length()>0) strCount.toLong
else 0

大数据入门到精通5--spark 的 RDD 的 reduce方法使用的更多相关文章

  1. 大数据学习(26)—— Spark之RDD

    做大数据一定要有一个概念,需要处理的数据量非常大,少则几十T,多则上百P,全部放内存是不可能的,会OOM,必须要用迭代器一条一条处理. RDD叫做弹性分布式数据集,是早期Spark最核心的概念,是一种 ...

  2. 大数据入门到精通2--spark rdd 获得数据的三种方法

    通过hdfs或者spark用户登录操作系统,执行spark-shell spark-shell 也可以带参数,这样就覆盖了默认得参数 spark-shell --master yarn --num-e ...

  3. 大数据入门到精通18--sqoop 导入关系库到hdfs中和hive表中

    一,选择数据库,这里使用标准mysql sakila数据库 mysql -u root -D sakila -p 二.首先尝试把表中的数据导入到hdfs文件中,这样后续就可以使用spark来dataf ...

  4. 大数据入门到精通13--为后续和MySQL数据库准备

    We will be using the sakila database extensively inside the rest of the course and it would be great ...

  5. 大数据入门到精通12--spark dataframe 注册成hive 的临时表

    一.获得最初的数据并形成dataframe val ny= sc.textFile("data/new_york/")val header=ny.firstval filterNY ...

  6. 大数据入门到精通11-spark dataframe 基础操作

    // dataframe is the topic 一.获得基础数据.先通过rdd的方式获得数据 val ny= sc.textFile("data/new_york/")val ...

  7. 大数据入门到精通8-spark RDD 复合key 和复合value 的map reduce操作

    一.做基础数据准备 这次使用fights得数据. scala> val flights= sc.textFile("/user/hdfs/data/Flights/flights.cs ...

  8. 大数据入门到精通4--spark的rdd的map使用方式

    学习了之前的rdd的filter以后,这次来讲spark的map方式 1.获得文件 val collegesRdd= sc.textFile("/user/hdfs/CollegeNavig ...

  9. 大数据入门到精通1--大数据环境下的基础文件HDFS 操作

    1.使用hdfs用户或者hadoop用户登录 2.在linux shell下执行命令 hadoop fs -put '本地文件名' hadoop fs - put '/home/hdfs/sample ...

随机推荐

  1. ios自动监测更新

    http://blog.csdn.net/davidsph/article/details/8931718

  2. kvm云主机使用宿主机usb设备

    有些时候KVM客户机还是要使用USB设备,比如USB密钥等 KVM命令行参数 -usb 打开usb驱动程序,启动客户机usb支持-usbdevice devname 为客户机增加usb设备,devna ...

  3. 图片 base64转byte[]

    /// <summary> /// 保存base64图片,返回阿里云地址 /// </summary> /// <param name="imgCode&quo ...

  4. Django--ORM(模型层)--多表(重重点)

    一.数据库表关系 单表 重复的字段太多,所以需要一对多,多对多来简化 多表 多对一 多对多 一对一 =============================================== 一对 ...

  5. echarts图表--统计图表

    echarts官网图表API:http://echarts.baidu.com/index.html

  6. LeetCode题解:Flatten Binary Tree to Linked List:别人的递归!

    总是在看完别人的代码之后,才发现自己的差距! 我的递归: 先把左侧扁平化,再把右侧扁平化. 然后找到左侧最后一个节点,把右侧移动过去. 然后把左侧整体移到右侧,左侧置为空. 很复杂吧! 如果节点很长的 ...

  7. DataGrip 连接数据库查询出来的结果乱码的问题

    打开连接数据源选项 选择 Advanced----Charset  填入 GBK 应用即可 目前遇到的是连接 SYbase数据库

  8. TCP连接异常断开检测(转)

    TCP是一种面向连接的协议,连接的建立和断开需要通过收发相应的分节来实现.某些时候,由于网络的故障或是一方主机的突然崩溃而另一方无法检测到,以致始终保持着不存在的连接.下面介绍一种方法来检测这种异常断 ...

  9. How to Pronounce T + Dark L

    How to Pronounce T + Dark L Share Tweet Share Tagged With: Dark L The T and Dark L combination is co ...

  10. springmvc简单教程

    IDEA建立Spring MVC Hello World 详细入门教程(转自)   引子,其实从.NET转Java已经有几个月时间了,项目也做了不少,但是很多配置都是根据公司模板或者网上教程比忽略画瓢 ...