RDD编程 下(Spark自学四)
3.5 常见的转化操作和行动操作
3.5.1 基本RDD
1. 针对各个元素的转化操作
两个最常用的转化操作是map()和filter()。转化操作map()接受一个函数,把这个函数用于RDD中的每个元素,将函数的返回结果作为结果RDD中对应元素的值。而转化操作filter()则接收一个函数,并将RDD中满足该函数的元素放入新的RDD中返回。
inputRDD{1,2,3,4} >>>map x=>x*x >>> Mapped RDD{1,4,9,16}
inputRDD{1,2,3,4} >>>filter x=>x!=1 >>> Filtered RDD{2,3,4}
例 3-26:Python版计算RDD中各值的平方
nums = sc.parallelize([1,2,3,4])
squared = nums.map(lambda x : x*x)
for num in squared:
print "%i "%(num)
例 3-27:Scala版计算RDD中各值的平方
val input = sc.parallelize(List(1,2,3,4))
val result = input.map(x => x*x)
println(result.collect().mkString(","))
例 3-29: Python中的flatMap()将行数据切分为单词
>>> lines = sc.parallelize(["hello world","hi"])
>>> words1 = lines.flatMap(lambda line: line.split(" "))
>>> words2 = lines.map(lambda line : line.split(" "))
>>> words1.first()
'hello'
>>> words2.first()
['hello', 'world']
例 3-30: Scala中的flatMap()将行数据切分为单词
val lines = sc.parallelize(["hello world", "hi"])
words = lines.flatMap(line=> line.split(" "))
words.first()
2. 伪集合操作
RDD支持许多数学上的集合操作,比如合并和相交。注意,这些操作都要求操作的RDD、是相同数据类型的。
RDD.distinct()生成一个只包含不同元素的新RDD。
union(other)操作返回一个包含两个RDD中所有元素的RDD。
intersection(other)方法只返回两个RDD中都有的元素。
subtract(other)函数接受另一个RDD作为参数,返回一个由只存在于第一个RDD中而不存在第二个RDD中的所有元素组成的RDD。
cartesian(other)转化操作会返回所有可能的(a,b)对,其中a是源RDD中的元素,b来自另一个RDD。
3. 行动操作
例 3-32:Python中的reduce()
>>> nums = sc.parallelize([1,2,3,4])
>>> sums = nums.reduce(lambda x, y:x + y)
>>> sums
10
例3-33:Scala中的reduce()
val sum = rdd.reduce((x, y) => x+y)
RDD的一些行动操作会以普通集合或者值的形式将RDD的部分或全部数据返回驱动器程序中。
collect()操作会将整个RDD的内容返回。
take(n)返回RDD中的n个元素。
top(n)从RDD中获取前n个元素。
foreach(func)对RDD中的每个元素使用给定的函数。
count()用来返回元素个数。
3.5.2 在不同RDD类型间转换
略
3.6 持久化(缓存)
Spark RDD是惰性求值的,而有时我们希望能多次使用同一个RDD。如果简单的对RDD调用行动操作,Spark每次都会重算RDD以及它的所有依赖。
例3-39: Scala中的两次执行
val result = input.map(x => x*x)
println(result.count())
println(result.collect().mkString(","))
为了避免多次计算同一个RDD, 可以让Spark对数据进行持久化。当我们让Spark持久化存储一个RDD时,计算出RDD的节点会分别保存它们所求出的分区数据。如果一个有持久化数据的节点发生故障,Spark会在需要用到缓存数据时重算丢失的数据分区。
例3-40: 在Scala中使用persist()
val result = input.map(x => x*x)
result.persist(StorageLevel.DISK_ONLY)
println(result.count())
println(result.collect().mkString(","))
注意,persist()调用本身不会引发强制求值。
RDD还有一个方法叫做unpersist(),调用该方法可以手动把持久化的RDD从缓存中移除。
RDD编程 下(Spark自学四)的更多相关文章
- 02、体验Spark shell下RDD编程
02.体验Spark shell下RDD编程 1.Spark RDD介绍 RDD是Resilient Distributed Dataset,中文翻译是弹性分布式数据集.该类是Spark是核心类成员之 ...
- Spark(四)【RDD编程算子】
目录 测试准备 一.Value类型转换算子 map(func) mapPartitions(func) mapPartitions和map的区别 mapPartitionsWithIndex(func ...
- RDD编程 上(Spark自学三)
弹性分布式数据集(简称RDD)是Spark对数据的核心抽象.RDD其实就是分布式的元素集合.在Spark中,对数据的操作不外乎创建RDD.转化已有RDD以及调用RDD操作进行求值.而在这一切背后,Sp ...
- spark实验(四)--RDD编程(1)
一.实验目的 (1)熟悉 Spark 的 RDD 基本操作及键值对操作: (2)熟悉使用 RDD 编程解决实际具体问题的方法. 二.实验平台 操作系统:centos6.4 Spark 版本:1.5.0 ...
- Spark编程模型(RDD编程模型)
Spark编程模型(RDD编程模型) 下图给出了rdd 编程模型,并将下例中用 到的四个算子映射到四种算子类型.spark 程序工作在两个空间中:spark rdd空间和 scala原生数据空间.在原 ...
- Spark RDD编程-大数据课设
目录 一.实验目的 二.实验平台 三.实验内容.要求 1.pyspark交互式编程 2.编写独立应用程序实现数据去重 3.编写独立应用程序实现求平均值问题 四.实验过程 (一)pyspark交互式编程 ...
- Spark菜鸟学习营Day1 从Java到RDD编程
Spark菜鸟学习营Day1 从Java到RDD编程 菜鸟训练营主要的目标是帮助大家从零开始,初步掌握Spark程序的开发. Spark的编程模型是一步一步发展过来的,今天主要带大家走一下这段路,让我 ...
- Spark学习之RDD编程总结
Spark 对数据的核心抽象——弹性分布式数据集(Resilient Distributed Dataset,简称 RDD).RDD 其实就是分布式的元素集合.在 Spark 中,对数据的所有操作不外 ...
- 【spark 深入学习 05】RDD编程之旅基础篇-01
---------------- 本节内容 1.RDD的工作流程 2.WordCount解说 · shell版本WordCount · java版本WordCount -------------- ...
随机推荐
- gcc 簡單操作
gcc -c test.c 產出 test.o object file gcc -c test.c -o XXX 產出 XXX object file gcc test.c -o aaa 產出 aaa ...
- 慎用Java递归调用
总结:慎用Java递归调用,测试时可以尝试该方法,否则尽量不要使用递归!递归过多调用时,最好改为for或者whlie来代替. 在java语言中,使用递归调用时,如果过多的调用容易造成java.lang ...
- discuz自定义生成单页面
在pc端,若要生成一个单页面,有一个比较方便的方法是生成新的专题页,然后diy其中的内容. 不过这种做法有两个缺点 1 url太过冗赘 2 只有一个插入url代码功能,没有文本编辑功能 而且文本框小的 ...
- 区块链开发(七)truffle使用入门汇总
截止上篇博客,以太坊区块链开发的环境和框架基本上搭建完毕.这一篇博客重点梳理一下基本的流程和操作演示. 前奏 基于前面的安装配置,现在重新梳理一遍,以前博客讲到的就在这里一笔带过. (1)创建一个工作 ...
- 如何设置Google Chrome的界面显示语言
昨天不小心,把Chrome浏览器的界面语言换成了中文, 结果换不回去英文了!!! 这是为啥呀? 我本来使用的是英文界面,换成中文却不让换回原来的语言,这怎么也说不过去吧. Google了一会子也没找到 ...
- [bzoj5017][Snoi2017]炸弹 tarjan缩点+线段树优化建图+拓扑
5017: [Snoi2017]炸弹 Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 608 Solved: 190[Submit][Status][ ...
- HDU 6362.oval-and-rectangle-数学期望、微积分 (2018 Multi-University Training Contest 6 1001)
2018 Multi-University Training Contest 6 6362.oval-and-rectangle 题意就是椭圆里画内接矩形,问你矩形周长的期望. 比赛的时候推了公式,但 ...
- 1953 Problem B #103. 子串查找
#include<stdio.h> #include<string.h> main() { char a[100],b[100]; int n,k,i; gets(a); ge ...
- 36、Django实战第36天:首页功能开发
1.编辑users.views.py ... class IndexView(View): """ 首页 """ def get(self, ...
- 26、Django实战第26天:配置全局导航
1.编辑index.html,继承base.html 2.编辑base.html,根据是否登录不同显示 问题:当我们选中一个导航,选中样式并没有成为选中的状态 因此我们编辑base.html对导航中进 ...