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. Smith-Waterman算法及其Java实现

    Smith-Waterman算法是1981年Smith和Waterman提出的一种用来寻找并比较具有局部相似性区域的动态规划算法,很多后来的算法都是在该算法的基础上发展的.这是一种两序列局部比对算法, ...

  2. html实现点击章节自动调到开头

    #转载请联系 原理是用id的值结合a链接实现锚点效果.比较简单,直接放一段代码好了. <!DOCTYPE html> <html lang="en"> &l ...

  3. selenium+python在mac环境上的搭建【转载】

    前言 mac自带了python2.7的环境,所以在mac上安装selenium环境是非常简单的,输入2个指令就能安装好 需要安装的软件: 1.pip 2.selenium2.53.6 3.Firefo ...

  4. Django基本操作

    Django官网下载页面 安装(安装最新LTS版): pip3 install django==1.11.9 创建一个django项目: 下面的命令创建了一个名为"s8"的Djan ...

  5. poj 1696(极角排序)

    Space Ant Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3924   Accepted: 2457 Descrip ...

  6. Laravel 中的 Many-To-Many

    在实际的开发中,我们经常会接触到几种常见的对应关系模式: One-To-One //一对一 One-To-Many //一对多 Many-To-Many //多对多 在刚刚开始接触到这些概念的时候,其 ...

  7. 图解Javascript——执行上下文

    什么是执行上下文? 执行上下文(Execution Context)是ECMAScript规范中用来描述 JavaScript 代码执行的抽象概念,规定了当前代码执行的环境(当前执行代码片段中的变量. ...

  8. 利用ipv6技术,废旧笔记本变成互联网server

    如果你家的路由器已经get到了ipv6地址,并且你家的电脑也获取了有效的ipv6地址,在广域网的设备可以访问到.那恭喜你,再配合我这个ddns,你可以完美地把你家的电脑当服务器使用. 1.确保你家的宽 ...

  9. 洛谷——P2958 [USACO09OCT]木瓜的丛林Papaya Jungle

    P2958 [USACO09OCT]木瓜的丛林Papaya Jungle 题目描述 Bessie has wandered off the farm into the adjoining farmer ...

  10. Java 线程 锁

    http://www.blogjava.net/tscfengkui/archive/2010/11/10/337709.html?opt=admin http://hi.baidu.com/xhxz ...