02、体验Spark shell下RDD编程

1、Spark RDD介绍

RDD是Resilient Distributed Dataset,中文翻译是弹性分布式数据集。该类是Spark是核心类成员之一,是贯穿Spark编程的始终。初期阶段,我们可以把RDD看成是Java中的集合就可以了,在后面的章节中会详细讲解RDD的内部结构和工作原理。

2、Spark-shell下实现对本地文件的单词统计

2.1思路

word count是大数据学习的经典案例,很多功能实现都可以归结为是word count的使用。工作过程为使用SparkContext对象的textFile方法加载文件形成Spark RDD1,RDD1中每个元素就是文件中的每一行文本,然后对RDD的每个元素进行压扁flatMap操作,形成RDD2,RDD2中每个元素是将RDD1的每行拆分出来产生的单词,因此RDD2就是单词的集合,然后再对RDD2进行标一成对,形成(单词,1)的元组的集合RDD3,最后对RDD3进行按照key进行聚合操作形成RDD4,最终将RDD4计算后得到的集合就是每个单词的数量

2.2 处理流程

App->SparkContext: textFile加载文件
SparkContext->RDD1: 创建RDD
RDD1-->App: 返回RDD1
App->RDD1: flatMap压扁操作
RDD1->RDD2: 产生RDD2
RDD2-->App: 返回RDD2
App->RDD2: map标一成对
RDD2->RDD3: 产生RDD3
RDD3-->App: 返回RDD3
App->RDD3: reduceByKey聚合
RDD3->RDD4: 产生RDD4
RDD4-->App: 返回RDD4
App->RDD4: collect收集结果数据

2.3 分步实现代码

// 进入spark shell环境
$>spark-shell // 1.加载文件
scala>val rdd1 = sc.textFile("file:///homec/centos/1.txt") // 2.压扁每行
scala>val rdd2 = rdd1.flatMap(_.split(" ")) // 3.标1成对
scala>val rdd3 = rdd2.map(w=>(w,1)) // 4.按照key聚合每个key下的所有值
scala>val rdd4 = rdd3.reduceByKey(_+_) // 5.显式数据
scala>rdd4.collect()

2.4 一步实现代码

$scala>sc.textFile("file:///home/centos/1.txt")
.flatMap(_.split(" "))
.map((_,1))
.reduceByKey(_+_)
.collect

3、Spark-shell下实现对气温数据的最大最小聚合

3.1 思路分析

气温数据数各年度内气温列表,将每一行变换成(year,temp)元组后,按照yearn进行聚合即可。

3.2 处理流程

App->SparkContext: textFile加载文件
SparkContext->RDD1: 产生RDD1
RDD1-->App: 返回RDD1
App->RDD1: map变换每行为(year,(max,min))元组
RDD1->RDD2: 产生RDD2
RDD2-->App: 返回RDD2
App->RDD2: reduceByKey双聚合气温极值
RDD2->RDD3:产生RDD3
App->RDD3: collect()收集结果

3.3 分步实现代码

// 进入spark shell环境
$>spark-shell // 1.加载气温数据文件
scala>val rdd1 = sc.textFile("/home/centos/temps.dat") // 2.压扁每行
scala>val rdd2 = rdd1.flatMap(e=>{
val arr = e.split(" ")
(arr(0).toInt, (arr(1).toInt ,arr(1).toInt))
}) // 3.reduceByKey
scala>val rdd3 = rdd2.reduceByKey((a,b)=>{
import scala.math
(math.max(a(0),b(0)) , math.min(a(1),b(1)))
}) // 4.收集日志
scala>rdd3.collect()

3.4 一步实现代码

$scala>sc.textFile("file:///home/centos/temps.dat")
.map(line=>{
val arr = line.split(" ")
(arr(0).toInt,(arr(1).toInt , arr(1).toInt))
})
.reduceByKey((a,b)=>{
import scala.math
(math.max(a(0) , b(0)) , math.min(a(1) , b(1)))
})
.collect()

02、体验Spark shell下RDD编程的更多相关文章

  1. Spark学习之RDD编程(2)

    Spark学习之RDD编程(2) 1. Spark中的RDD是一个不可变的分布式对象集合. 2. 在Spark中数据的操作不外乎创建RDD.转化已有的RDD以及调用RDD操作进行求值. 3. 创建RD ...

  2. Spark学习之RDD编程总结

    Spark 对数据的核心抽象——弹性分布式数据集(Resilient Distributed Dataset,简称 RDD).RDD 其实就是分布式的元素集合.在 Spark 中,对数据的所有操作不外 ...

  3. 在Scala IDEA for Eclipse或IDEA里程序编译实现与在Spark Shell下的对比(其实就是那么一回事)

    不多说,直接上干货! 比如,我这里拿主成分分析(PCA). 1.主成分分析(PCA)的概念介绍 主成分分析(PCA) 是一种对数据进行旋转变换的统计学方法,其本质是在线性空间中进行一个基变换,使得变换 ...

  4. spark 中的RDD编程 -以下基于Java api

    1.RDD介绍:     RDD,弹性分布式数据集,即分布式的元素集合.在spark中,对所有数据的操作不外乎是创建RDD.转化已有的RDD以及调用RDD操作进行求值.在这一切的背后,Spark会自动 ...

  5. Spark学习笔记——RDD编程

    1.RDD——弹性分布式数据集(Resilient Distributed Dataset) RDD是一个分布式的元素集合,在Spark中,对数据的操作就是创建RDD.转换已有的RDD和调用RDD操作 ...

  6. spark实验(四)--RDD编程(1)

    一.实验目的 (1)熟悉 Spark 的 RDD 基本操作及键值对操作: (2)熟悉使用 RDD 编程解决实际具体问题的方法. 二.实验平台 操作系统:centos6.4 Spark 版本:1.5.0 ...

  7. Spark(四)【RDD编程算子】

    目录 测试准备 一.Value类型转换算子 map(func) mapPartitions(func) mapPartitions和map的区别 mapPartitionsWithIndex(func ...

  8. Spark学习(2) RDD编程

    什么是RDD RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.弹性.里面的元素可并行计算的集合 RDD允 ...

  9. 【spark 深入学习 05】RDD编程之旅基础篇-01

    ---------------- 本节内容 1.RDD的工作流程 2.WordCount解说  · shell版本WordCount  · java版本WordCount -------------- ...

随机推荐

  1. [PowerShell]template engine

    今天讨论的是如何在Powershell里实现一个简单的Template Engine的功能. 假设模板文件的内容如下:template.tt hello $name welcome $company ...

  2. 解决浏览器location.href重定向失效问题

    在[location.href]赋值语句后,添加页面刷新代码[location.reload(true)],参数为[true]这样就等价于F5刷新页面了. 需要注意的是:不能把[location.re ...

  3. sharepoint_study_7

    描述:sharepoint网站上部署WebPart出错后,如何删除错误的WebPart?如何恢复原页面? 解决:到管理中心去将该解决方案收回并删除,可以恢复原页面,但是错误的webpart信息会保留, ...

  4. 惠普台式机在UEFI BIOS设置通电自动开机 影响电脑自动重启关不了机设置

    设置通电自动开机 影响电脑自动重启关不了机设置   惠普台式机在UEFI BIOS中 1. 开机时不断点击F10键进入BIOS,选择Advanced(高级)然后选择Boot Options,点击回车 ...

  5. vue混入(mixins)

    混入(mixins)是一种分发vue组件中可复用功能的非常灵活的方式.混入对象可以包含任意组件选项. 当组件使用混入对象时,所以混入对象的选项将被混入该组件本身选项,当组件和混入对象含有同名选项时,这 ...

  6. mysql初始化

    注意:--install前,必须用mysql启动命令的绝对路径 # 制作MySQL的Windows服务,在终端执行此命令: mysqld --install # 移除MySQL的Windows服务,在 ...

  7. java——简易版build模式

    参考教程:https://blog.csdn.net/fanxudonggreat/article/details/78927773 public class Computer { private S ...

  8. linux 6 安装 使用 XtraBackup

    帮助文档:https://www.cnblogs.com/imweihao/p/7290026.html ---Yum安装 官网地址:https://www.percona.com/doc/perco ...

  9. Tab 插件(一)

    前言 使用Jquery封装插件,使代码复用不需要每个功能重新编写代码只需修改传入参数. jQuery 插件常见到有类开发 和对象开发模式, 在下边介绍两种模式使用,初次编写,有误拍砖. jQuery ...

  10. DRF-->2序列化组件的使用和接口设计--get,post,put,delete&优化组件

    !!!!! !!!!! 记住这个图 !!!!! 上篇博客说道DRF序列化组件的get,只是简单的举一个实例,然而在现实生活中我们前后端进行交互的时候更多的用到了Json数据格式,这也就是说前后端交互的 ...