培训系列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. win7 数据源只有 SQL SERVER, WIN7 64bit 环境使用 access 作为 CIS的数据源

    最近换了个工作电脑,安装的是 WIN7 64BIT,结果配置CIS数据源的时候出现问题了,默认的数据源只有 SQL SERVER,没有ACCESS的数据源.后来在网上寻找了一圈后,找到了解决方法: C ...

  2. Python :数据结构

    LearnPython :数据结构 .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .labe ...

  3. 6.简单提取小红书app数据(简单初步试采集与分析)-1

    采集小红书数据爬虫:1.本来是要通过app端的接口去直接采集数据,但是app接口手机端设置本地代理这边开启抓包后就不能正常访问数据.所以就采用了微信小程序里的小红书app接口去采集数据. 2.通过 f ...

  4. Python学习笔记_week2_列表、元组、字典、字符串、文件、i编码

    一. 列表.元组 names=["A","B","C","D"] print(names) print(names[0] ...

  5. 复习 HTML

    1.<b></b>:加粗 <i></b>:斜体 <u></u>:文字下划线 <s></s>:文字删除线 ...

  6. Flex+BlazeDS+java通信详细笔记

    整了很长时间的通信,还是一直有一点问题.现在搞定了,记录一下,也跟有需求的同学们共享. 我重新把所有的过程再做一遍. 1新建Flex+BlazeDS+JAVA项目 右键.新建Flex项目 其中blaz ...

  7. Python linux 上的管理工具 pyenv 安装, pip 使用, python项目(版本分割, 项目分割, 虚拟环境创建)

    01: 假设你有一个最小环境安装的 centos-6.x 的linux操作系统 02: 安装 git => yum -y install git 03: 安装依赖 => yum -y in ...

  8. 【版本发布】JAVA微服务开发框架,Jeecg-P3 1.0.0 重构版本发布

    1.项目介绍 Jeecg-P3是一个微服务框架,采用插件式模式开发:业务插件以JAR方式提供,松耦合可插拔支持独立部署,也可无缝集成Jeecg平台中,目前jeecg已经提供了在线聊天,我的邮箱等一系列 ...

  9. 数据结构:Stack

    Stack设计与实现 Stack基本概念 栈是一种 特殊的线性表 栈仅能在线性表的一端进行操作 栈顶(Top):允许操作的一端 栈底(Bottom):不允许操作的一端 Stack的常用操作 创建栈 销 ...

  10. Jenkins:管理节点

    Jenkins 管理节点 是管理所有即将在其上执行任务(JOB)的slave机器,包括各种OS类型的主机,都可以作为节点,因为Jenkins是java实现的,所以能安装JVM的OS都可以作为Jenki ...