培训系列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. [Lua]内存泄漏与垃圾回收

    参考链接: http://colen.iteye.com/blog/578146 一.内存泄漏的检测 Lua的垃圾回收是自动进行的,但是我们可以collectgarbage方法进行手动回收.colle ...

  2. 关于jQuery中click&live&on中的坑

    click()方法: click()方法针对未创建的元素不起作用,譬如用js传入的元素,所以可以使用live()方法来操作未创建的元素属性 live()方法: $("button" ...

  3. uva-10905-贪心

    题意:对于输入的数字,拼接成一个最大的数字 解法:把数字当成字符串处理,排序,输出即可 import java.io.FileInputStream; import java.io.FileNotFo ...

  4. java与xml转换 -- XStreamAlias

    @XStreamAlias 1.特点 简化的API; 无映射文件; 高性能,低内存占用; 整洁的XML; 不需要修改对象;支持内部私有字段,不需要setter/getter方法 提供序列化接口; 自定 ...

  5. redis导数到mysql

    filename=$(date "+%Y%m%d%H%M%S") //将type为list,键为bi0205导出文本,并保存到mysql导入导出目录redis-cli -h 服务器 ...

  6. 解决Java Web项目中Word、Excel等二进制文件编译后无法打开的问题

    今天写新项目的时候遇到一个问题,在resources目录下存储的.xlsx文件,编译过后会增大几kb,无法打开. Google了一番之后,发现问题源自于maven-resources-plugin这个 ...

  7. Centos下lnmp正确iptables配置规则

    查看iptable运行状态 service iptables status 清除已有规则 iptables -Fiptables -Xiptables -Z 开放端口 #允许本地回环接口(即运行本机访 ...

  8. 06-padding(内边距)

    padding padding:就是内边距的意思,它是边框到内容之间的距离 另外padding的区域是有背景颜色的.并且背景颜色和内容的颜色一样.也就是说background-color这个属性将填充 ...

  9. 如何使用navicat远程连接服务器上的oracle数据库

  10. JSP页面java代码报错:Purgoods cannot be resolved to a type

    错误提示 : Purgoods cannot be resolved to a type Purgoods不能解析为一个类型 原因 : 缺少引入Purgoods类 页面中引入java类,执行java代 ...