map(func)

对数据集中的元素逐一处理,变为新的元素,但一个输入元素只能有一个输出元素

scala> pairData.collect()
res6: Array[Int] = Array(1, 2, 3, 4, 5)
scala> val pairData = distData.map(a=>(a,1)).collect()
res2: Array[(Int, Int)] = Array((1,1), (2,1), (3,1), (4,1), (5,1))

flatMap(func)

类似与map,对数据集中的元素逐一处理,变为新的元素,但一个输入元素可以被映射为0或多个输出元素

scala> val file = sc.textFile("/tmp/input")
scala> file.collect()
res11: Array[String] = Array("1 2 3 4 ", test hello world, 123 8997 876, hai bai du) // 每一行为一个元素
scala> file.flatMap(a => a.split(" ")).collect()
res12: Array[String] = Array(1, 2, 3, 4, test, hello, world, 123, 8997, 876, hai, bai, du)

filter(func)

对数据集中的元素注意处理,返回经过func函数计算后返回值为true的输入元素组成

scala> pairData.collect()
res7: Array[(Int, Int)] = Array((1,1), (2,1), (3,1), (4,1), (5,1))
scala> pairData.filter(r => r._1 == r._2).collect()
res8: Array[(Int, Int)] = Array((1,1))

mapValues(func)

对数据集中的value进行逐个处理, 如RRD.mapValues(v => 1.0/20),将所有的value变为1.0/20

scala> pairData.collect()
res2: Array[(Int, Int)] = Array((1,1), (2,1), (3,1), (4,1), (5,1))
scala> pairData.mapValues( v=> 1.0/5 ).collect()
res5: Array[(Int, Double)] = Array((1,0.2), (2,0.2), (3,0.2), (4,0.2), (5,0.2))

distinct()

返回一个包含源数据集中所有不重复元素的新数据集

scala> val a = Array(1,1,3,3,4)
a: Array[Int] = Array(1, 1, 3, 3, 4)
scala> sc.parallelize(a).distinct().collect()
res6: Array[Int] = Array(1, 3, 4)

groupByKey()

对相同key的数据进行group操作,在一个(K,V)对的数据集上调用,返回一个(K,Seq[V])对的数据集

scala> pairData.collect()
res7: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1))
scala> pairData.groupByKey().collect()
res9: Array[(Int, Seq[Int])] = Array((1,ArrayBuffer(1, 1)), (3,ArrayBuffer(1, 1)), (4,ArrayBuffer(1)))

reduceByKey(func)

使用指定的reduce函数,将相同key的值聚合到一起,并执行函数

scala> pairData.collect()
res7: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1))
scala> pairData.reduceByKey(_+_).collect()
res10: Array[(Int, Int)] = Array((1,2), (3,2), (4,1))

sortByKey([ascending], [numTasks])

scala> pairData.collect()
res7: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1))
scala> pairData.sortByKey(false).collect
res12: Array[(Int, Int)] = Array((4,1), (3,1), (3,1), (1,1), (1,1))

union(otherDataSet)

返回一个新的数据集,新数据集是由源数据集和参数数据集联合而成

scala> pairData.collect()
res16: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1))
scala> pairData2.collect()
res14: Array[(Int, Int)] = Array((1,1), (2,1), (3,1), (4,1), (5,1), (6,1), (7,1))
scala> pairData.union(pairData2).collect()
res15: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1), (1,1), (2,1), (3,1), (4,1), (5,1), (6,1), (7,1))

join(otherDataSet)

在类型为(K,V)和(K,W)类型的数据集上调用时,返回一个相同key对应的所有元素对在一起的(K, (V, W))数据集

scala> pairData.collect()
res16: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1))
scala> pairData2.collect()
res14: Array[(Int, Int)] = Array((1,1), (2,1), (3,1), (4,1), (5,1), (6,1), (7,1))
scala> pairData.distinct().join(pairData2.distinct()).collect()
res18: Array[(Int, (Int, Int))] = Array((1,(1,1)), (3,(1,1)), (4,(1,1)))

cogroup(otherDataSet)

在类型为(K,V)和(K,W)的数据集上调用,返回一个 (K, Seq[V], Seq[W])元组的数据集

scala> pairData.collect()
res16: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1))
scala> pairData2.collect()
res14: Array[(Int, Int)] = Array((1,1), (2,1), (3,1), (4,1), (5,1), (6,1), (7,1))
scala> pairData.distinct().cogroup(pairData2.distinct()).collect()
res19: Array[(Int, (Seq[Int], Seq[Int]))] = Array((5,(ArrayBuffer(),ArrayBuffer(1))), (6,(ArrayBuffer(),ArrayBuffer(1))), (1,(ArrayBuffer(1),ArrayBuffer(1))), (2,(ArrayBuffer(),ArrayBuffer(1))), (7,(ArrayBuffer(),ArrayBuffer(1))), (3,(ArrayBuffer(1),ArrayBuffer(1))), (4,(ArrayBuffer(1),ArrayBuffer(1))))

cartesian(otherDataSet)

笛卡尔积,在类型为 T 和 U 类型的数据集上调用时,返回一个 (T, U)对数据集(两两的元素对)

scala> pairData.distinct().collect()
res16: Array[(Int, Int)] = Array((1,1), (3,1), (4,1))
scala> pairData2.collect()
res14: Array[(Int, Int)] = Array((1,1), (2,1), (3,1), (4,1), (5,1), (6,1), (7,1))
scala> pairData.distinct().cartesian(pairData2).collect()
res20: Array[((Int, Int), (Int, Int))] = Array(((3,1),(1,1)), ((3,1),(2,1)), ((3,1),(3,1)), ((3,1),(4,1)), ((3,1),(5,1)), ((3,1),(6,1)), ((3,1),(7,1)), ((4,1),(1,1)), ((4,1),(2,1)), ((4,1),(3,1)), ((4,1),(4,1)), ((4,1),(5,1)), ((4,1),(6,1)), ((4,1),(7,1)), ((1,1),(1,1)), ((1,1),(2,1)), ((1,1),(3,1)), ((1,1),(4,1)), ((1,1),(5,1)), ((1,1),(6,1)), ((1,1),(7,1)))

sample(withReplacement,fraction, seed)

返回一个数组,在数据集中随机采样num个元素组成,可以选择是否用随机数替换不足的部分,Seed用于指定的随机数生成器种子

scala> pairData.collect()
res16: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1))
scala> pairData.sample(false, 0.2, 1)
res34: Array[(Int, Int)] = Array((4,1))

reduce(func)

通过函数func(接受两个参数,返回一个参数)聚集数据集中的所有元素。

scala> val c = Array(1, 2, 3, 4, 5)
c: Array[Int] = Array(1, 2, 3, 4, 5)
scala> sc.parallelize(c).reduce(_+_)
res24: Int = 15

collect()

以数组的形式,返回数据集的所有元素

scala> pairData.collect()
res16: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1))

count()

返回数据集的元素的个数

scala> pairData.collect()
res16: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1))
scala> pairData.count()
res29: Long = 5

first()

返回数据集中的第一个元素

scala> pairData.collect()
res16: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1))
scala> pairData.first()
res30: (Int, Int) = (1,1)

take(n)

返回一个由数据集的前n个元素组成的数组。

scala> pairData.collect()
res16: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1))
scala> pairData.take(3)
res31: Array[(Int, Int)] = Array((1,1), (1,1), (3,1))

takeSample(withReplacement,num, seed)

返回一个数组,在数据集中随机采样num个元素组成,可以选择是否用随机数替换不足的部分,Seed用于指定的随机数生成器种子

scala> pairData.collect()
res16: Array[(Int, Int)] = Array((1,1), (1,1), (3,1), (3,1), (4,1))
scala> pairData.takeSample(false, 2, 1)
res36: Array[(Int, Int)] = Array((3,1), (3,1))

countByKey()

返回一个(K,Int)对的Map,表示每一个key对应的元素个数

scala> pairData.countByKey()
res37: scala.collection.Map[Int,Long] = Map(3 -> 2, 4 -> 1, 1 -> 2)

saveAsTextFile(path)

将数据集的元素,以textfile的形式,保存到本地文件系统,HDFS或者任何其它hadoop支持的文件系统。

saveAsSequenceFile(path)

将数据集的元素,以Hadoop sequencefile的格式,保存到指定的目录下,本地系统,HDFS或者任何其它hadoop支持的文件系统。

foreach()

在数据集的每一个元素上,运行函数func进行更新。这通常用于边缘效果,例如更新一个累加器

scala> val accum = sc.accumulator(0)
scala> sc.parallelize(Array(1, 2, 3, 4)).foreach(x => accum += x)
scala> accum.value
res47: Int = 10

Spark中的RDD操作简介的更多相关文章

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

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

  2. Spark_RDD之RDD操作简介

    1.转化操作 转化操作是返回一个新的RDD的操作,我们可以使用filter()方法进行转化.举个使用scala进行转化操作的例子. def main(args: Array[String]): Uni ...

  3. Spark中的RDD和DataFrame

    什么是DataFrame 在Spark中,DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格. RDD和DataFrame的区别 DataFrame与RDD的主要区别在 ...

  4. spark中的RDD以及DAG

    今天,我们就先聊一下spark中的DAG以及RDD的相关的内容 1.DAG:有向无环图:有方向,无闭环,代表着数据的流向,这个DAG的边界则是Action方法的执行 2.如何将DAG切分stage,s ...

  5. 浅谈大数据神器Spark中的RDD

    1.究竟什么是RDD呢? 有人可能会回答是:Resilient Distributed Dataset.没错,的确是如此.但是我们问这个实际上是想知道RDD到底是个什么东西?以及它到底能干嘛?好的,有 ...

  6. 关于ios中的文本操作-简介

    来源:About Text Handling in iOS 官方文档 iOS平台为我们提供了许多在app中展示文本和让用户编辑文本的方式.同时,它也允许你在app视图中展示格式化的文本和网页内容.你可 ...

  7. spark中各种连接操作以及有用方法

    val a = sc.parallelize(Array(("123",4.0),("456",9.0),("789",9.0)) val ...

  8. Spark编程模型及RDD操作

    转载自:http://blog.csdn.net/liuwenbo0920/article/details/45243775 1. Spark中的基本概念 在Spark中,有下面的基本概念.Appli ...

  9. Spark中的键值对操作-scala

    1.PairRDD介绍     Spark为包含键值对类型的RDD提供了一些专有的操作.这些RDD被称为PairRDD.PairRDD提供了并行操作各个键或跨节点重新进行数据分组的操作接口.例如,Pa ...

随机推荐

  1. JavaScript 32位整型无符号操作

    在 JavaScript 中,所有整数字变量默认都是有符号整数,这意味着什么呢? 有符号整数使用 31 位表示整数的数值,用第 32 位表示整数的符号,0 表示正数,1 表示负数. 数值范围从 -2^ ...

  2. SNF开发平台WinForm之七-单据打印和使用说明-SNF快速开发平台3.3-Spring.Net.Framework

    8.1运行效果: 8.2开发实现: 1.  先要创建.grf报表模版,指定数据列.存储位置:Reports\Template文件夹下 2.  之后在程序当中查出数据,之后把数据和打印模版 传入方法进行 ...

  3. [Shell] 读取脚本路径

    以下是几种在 Shell 中读取路径的方法. 返回当前工作目录绝对路径 echo $(pwd) 返回 shell 第一个参数.如果被执行对象位于 PATH 路径中,则返回该对象绝对路径:否则返回被执行 ...

  4. mvc4.0添加EF4.0时发生编译时错误

    解决此问题是因为MVC4.0默认未添加EF4.0的引用,EF4.0引用的是System.Data.Entity.dll, Version=4.0.0.0, 解决办法: 在web.config文件sys ...

  5. 《编写高质量代码:改善C#程序的157个建议》源码下载

    ==== 目录 前 言第一部分 语言篇第1章 基本语言要素 / 2建议1:正确操作字符串 / 2建议2:使用默认转型方法 / 6建议3:区别对待强制转型与as和is / 9建议4:TryParse比P ...

  6. 初探KMP算法

            数据结构上老师也没讲这个,平常ACM比赛时我也没怎么理解,只是背会了代码--前天在博客园上看见了一篇介绍KMP的,不经意间就勾起了我的回忆,写下来吧,记得更牢. 一.理论准备      ...

  7. 红黑树(五)之 Java的实现

    概要 前面分别介绍红黑树的理论知识.红黑树的C语言和C++的实现.本章介绍红黑树的Java实现,若读者对红黑树的理论知识不熟悉,建立先学习红黑树的理论知识,再来学习本章.还是那句老话,红黑树的C/C+ ...

  8. Device eth0 does not seem to be present, delaying initialization.转载

    昨天在vm里面克隆了个虚拟机,克隆之后,启动了网卡起不来,已启动就报 Device eth0 does not seem to be present, delaying initialization. ...

  9. SharePoint 2013 搜索爬网功能

    最近在政府部门介绍SharePoint 2013 新功能,我也准备了很多,比如SharePoint 2013的Search.以后有机会谈谈Office Web App,Workflow等. Share ...

  10. Vue基础---->VueJS的使用(一)

    Vue.js是一个构建数据驱动的web界面的库.它的目标是通过尽可能简单的API 实现响应的数据绑定和组合的视图组件,今天我们就开始vue.js的学习. vue的安装及使用 一.vue的下载地址:ht ...