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自学四)的更多相关文章

  1. 02、体验Spark shell下RDD编程

    02.体验Spark shell下RDD编程 1.Spark RDD介绍 RDD是Resilient Distributed Dataset,中文翻译是弹性分布式数据集.该类是Spark是核心类成员之 ...

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

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

  3. RDD编程 上(Spark自学三)

    弹性分布式数据集(简称RDD)是Spark对数据的核心抽象.RDD其实就是分布式的元素集合.在Spark中,对数据的操作不外乎创建RDD.转化已有RDD以及调用RDD操作进行求值.而在这一切背后,Sp ...

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

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

  5. Spark编程模型(RDD编程模型)

    Spark编程模型(RDD编程模型) 下图给出了rdd 编程模型,并将下例中用 到的四个算子映射到四种算子类型.spark 程序工作在两个空间中:spark rdd空间和 scala原生数据空间.在原 ...

  6. Spark RDD编程-大数据课设

    目录 一.实验目的 二.实验平台 三.实验内容.要求 1.pyspark交互式编程 2.编写独立应用程序实现数据去重 3.编写独立应用程序实现求平均值问题 四.实验过程 (一)pyspark交互式编程 ...

  7. Spark菜鸟学习营Day1 从Java到RDD编程

    Spark菜鸟学习营Day1 从Java到RDD编程 菜鸟训练营主要的目标是帮助大家从零开始,初步掌握Spark程序的开发. Spark的编程模型是一步一步发展过来的,今天主要带大家走一下这段路,让我 ...

  8. Spark学习之RDD编程总结

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

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

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

随机推荐

  1. springmvc Converter

    以下,来自于Springmvc指南第二版,第93页. Spring的Converter是可以将一种类型转为另一种类型. 例如用户输入的date类型可能有多种格式. 比如:在controller中接收一 ...

  2. [ Python - 10 ] 练习:批量管理主机工具

    需求: 主机分组 登录后显示主机分组,选择分组后查看主机列表 可批量执行命令.发送文件,结果实时返回 主机用户名密码可以不同 流程图: 说明: ## 需求: 主机分组 登录后显示主机分组,选择分组后查 ...

  3. 【C++】隐式类型转换和 explicit关键字

    来自:黄邦勇帅 1. 当类中带有一个参数的构造函数时,将执形对象的隐式转换,比如有类 A,有一个带有一个参数的构造函数A(int i){}则当出现语句A m=1;就会调用带有一个参数的构造函数来创建对 ...

  4. firefox中outlook.com页面卡顿的原因

    在火狐中使用outlook.com时,鼠标点击动作后,页面会卡顿一段时间,每次点击都是如此. 因为之前火狐出现由于硬件加速导致页面卡顿的情况,因此第一反应就是关闭硬件加速. 果然,关闭硬件加速后,页面 ...

  5. <松本行弘的程序世界> 读书笔记

    第一章 编程语言不是从安全性的角度考虑以减少程序员犯错误,而是在程序员自己负责的前提下为他提供最大限度发挥能力的灵活性. 第二章 根据对象的不同类型而进行适当的处理,就是多态性的基本内容.根据数据类型 ...

  6. [Jquery]斑马线表格

    <!doctype html> <html> <head> <script src='js/jquery-1.9.1.min.js'></scri ...

  7. HDU 6362.oval-and-rectangle-数学期望、微积分 (2018 Multi-University Training Contest 6 1001)

    2018 Multi-University Training Contest 6 6362.oval-and-rectangle 题意就是椭圆里画内接矩形,问你矩形周长的期望. 比赛的时候推了公式,但 ...

  8. Encode and Decode Strings -- LeetCode

    Design an algorithm to encode a list of strings to a string. The encoded string is then sent over th ...

  9. AtCoder - 2567 RGB Sequence

    Problem Statement There are N squares arranged in a row. The squares are numbered 1, 2, …, N, from l ...

  10. 【贪心】【DFS】Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals) C. Andryusha and Colored Balloons

    从任意点出发,贪心染色即可. #include<cstdio> #include<algorithm> using namespace std; int v[200010< ...