RDD操作

1.对一个数据为{1,2,3,3}的RDD进行基本的RDD转化操作

函数名 目的 示例 结果

map()

函数应用于RDD中的每个元素 rdd.map(x=>x+1) {2,3,4,4}
flatMap() 将函数应用于RDD中的每个怨毒,通常用来切分单词 rdd.flatMap(x=>x.to(3)) {1,2,3,2,3,3,3}
filter() 返回一个通过传给filter()的函数的元素组成的RDD rdd.filter(x=>x!=1) {2,3,3}
distinct() 去重 rdd.distinct()

{1,2,3}

sample(withReplacement,fraction,[seed]) 对RDD进行采样,以及是否替换 rdd.sample(false,0.5) 非确定

2.对数据分别为{1,2,3}和{3,4,5}的RDD进行针对两个RDD的转化操作

函数名 目的 示例 结果
union() 生成一个包含两个RDD中所有元素的RDD rdd.union(other) {1,2,3,3,4,5}
intersection() 求两个RDD共同的元素RDD rdd.intersection(other) {3}
subtract() 移除一个元素的内容 rdd.subtract(other) {1,2}
cartesian() 与另一个RDD的笛卡儿积 rdd.cartesian(other) {(1,3),(1,4)...(3,5)}

3.对一个数据为{1,2,3,3}的RDD进行基本的RDD行动操作

函数名 目的 示例 结果
collect() 所有元素 rdd.collect() {1,2,3,3}
count() 元素个数 rdd.count() 4
countByValue() 各元素在rdd中出现的次数 rdd.countByValue() {(1,1),(2,1),(3,2)}
take(num) 从rdd中返回num个元素 rdd.take(2) {1,2}
top(num) 从rdd中返回最前面的num个元素 rdd.top(2) {3,3}
takeOrdered(num)(ordering) 按提供的顺序,返回最前面的怒骂个元素 rdd.takeOrdered(2)(myOrdering) {3,3}
takeSample(withReplacement,num,[seed]) 从rdd中返回任意一些元素 rdd.takeSample(false,1) 非确定的
reduce(func) 冰雷整合RDD中的所有数据 rdd.reduce((x,y)=>x+y) 9
fold(zero)(func) 和reduce一样,但是需要初始值 rdd.fold(0)((x,y)=>x+y) 9
aggregate(zeroValue)(seqOp,combOp) 和reduce()相似,但是通常返回不同类型的函数

rdd.aggregate((0,0))((x,y)=>(x,y)=>(x._1+y,x._2+1),(x,y)=>(x._1+y._1,x._2+y._2))

(9,4)
foreach(func) 对RDd中的每个元素使用给定的元素 rdd.foreach(func)

键值对操作

4.pair RDD的转化操作(以键值对集合{(1,2),(3,4),(3,6)}为例)

函数名 目的 示例 结果
reduceByKey(func) 合并具有相同键的值 rdd.reduceByKey((x,y)=>x+y) {(1,2),(3,10)}
groupByKey() 对具有相同键的值进行分组 rdd.groupByKey() {(1,[2]),(3,[4,6])}
combineByKey(createCombiner,mergeCombiners,partitioner) 使用不同的返回类型合并具有相同键的值    
mapValue(func) 对pairRDD中的每个值应用一个函数而不改变键 rdd.mapValues(x=>x+1) {(1,3),(3,5),(3,7)}
flatMapValues() 对pairRDD中的每个值应用一个返回迭代器的函数,然后返回的每个元素都生成一个对应原键的键值对记录,通常用于符号化 rdd.flatMapValues(x=>(x to 5)) {(1,2),(1,3),(1,4),(1,5),(3,4),(3,5)}
keys() 返回一个仅包含键的RDD rdd.keys() {1,3,3}
values() 返回一个仅包含值的RDD rdd.values() {2,4,6}
sortByKey() 返回一个根据键排序的RDD rdd.sortByKey() {(1,2),(3,4),(3,6)}

针对两个pairRDD的转换操作(rdd={(1,2),(3,4),(3,6)} other={(3,9)})

函数名 目的 示例 结果
subtractByKey 删掉RDD中的键与otherRDD中的键相同的元素 rdd.subtractByKey(other) {(1,2)}
join 对两个rdd进行内链接 rdd.join(other) {(3,(Some(4),9)),(3,(Some(6),9))}
rightOuterJoin 连接操作,确保第一个rdd的键必须存在(右外连接) rdd.rightOuterJoin(other) {(3,(4,Some(9))),(3,(4,Some(9)))}
leftOutrtJoin 连接操作,确保第二个rdd的键必须存在(左外连接) rdd.leftOuterJoin(other) {(1,(2,None)),(3,(4,Some(9))),(3,(6,Some(9)))}
cogroup 将两个rdd中拥有相同键的数据分组到一起 rdd.cogroup(other) {(1,([2],[])),(3,([4,6],[9]))}

5.PairRDD 的行动操作(以键值对集合{(1,2),(3,4),(3,6)})

函数 描述 示例 结果
countByKey() 对每个键对应的元素分别计数 rdd.countByKey() {(1,1),(3,2)}
collectAsMap() 将结果以映射表的形式返回,以便查询 rdd.collectAsMap() Mqp{(1,2),(3,4),(3,6)}
lookup(key) 返回给定键对应的所有值 rdd.lookup(3) [4,6]

RDD操作的更多相关文章

  1. Spark学习(一)--RDD操作

    标签(空格分隔): 学习笔记 Spark编程模型的两种抽象:RDD(Resilient Distributed Dataset)和两种共享变量(支持并行计算的广播变量和累加器). RDD RDD是一种 ...

  2. Spark编程模型及RDD操作

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

  3. Spark 键值对RDD操作

    键值对的RDD操作与基本RDD操作一样,只是操作的元素由基本类型改为二元组. 概述 键值对RDD是Spark操作中最常用的RDD,它是很多程序的构成要素,因为他们提供了并行操作各个键或跨界点重新进行数 ...

  4. SPARKR,对RDD操作的介绍

    (转载)SPARKR,对RDD操作的介绍   原以为,用sparkR不能做map操作, 搜了搜发现可以. lapply等同于map, 但是不能操作spark RDD. spark2.0以后, spar ...

  5. spark RDD操作的底层实现原理

    RDD操作闭包外部变量原则 RDD相关操作都需要传入自定义闭包函数(closure),如果这个函数需要访问外部变量,那么需要遵循一定的规则,否则会抛出运行时异常.闭包函数传入到节点时,需要经过下面的步 ...

  6. Spark性能优化(2)——广播变量、本地缓存目录、RDD操作、数据倾斜

    广播变量 背景 一般Task大小超过10K时(Spark官方建议是20K),需要考虑使用广播变量进行优化.大表小表Join,小表使用广播的方式,减少Join操作. 参考:Spark广播变量与累加器 L ...

  7. 【spark】RDD操作

    RDD操作分为转换操作和行动操作. 对于RDD而言,每一次的转化操作都会产生不同的RDD,供一个操作使用. 我们每次转换得到的RDD是惰性求值的 也就是说,整个转换过程并不是会真正的去计算,而是只记录 ...

  8. 【Spark】RDD操作具体解释4——Action算子

    本质上在Actions算子中通过SparkContext运行提交作业的runJob操作,触发了RDD DAG的运行. 依据Action算子的输出空间将Action算子进行分类:无输出. HDFS. S ...

  9. 4.RDD操作

    目录 一. RDD创建 从本地文件系统中加载数据创建RDD 从HDFS加载数据创建RDD 通过并行集合(列表)创建RDD 二. RDD操作 转换操作 filter(func) map(func) fl ...

随机推荐

  1. STM32W108芯片的SWD在IAR7.30版本中不能用

    提示说0x20000B8不能读,When Clear soft RAM BP

  2. 基于PHP的对接电子面单接口平台案例

    电子面单接口目前有三种对接方式,快递电子面单接口.菜鸟电子面单接口和快递鸟电子面单接口.这三种接口各有特点. 一.电子面单接口定义 1. 快递电子面单接口:快递公司自己开发的电子面单服务, 商家使用必 ...

  3. 纯JS操作服务器绑定控件(Repeat)实现表头升降排序

    JS实现功能 var obj = function (id) { return "string" == typeof id ? document.getElementById(id ...

  4. iptables常用命令

    常规: iptables -t filter -A INPUT -d -p tcp --dport -j DROPiptables -A INPUT -m iprange --src-range 22 ...

  5. linux - 文本处理 及 正则表达式

    先新建一个文件,并写入一些东西,方便测试, 从passwd里复制几行吧 $ /etc/passwd > passwd t$ ll 总用量 drwxrwxr-x huanghao huanghao ...

  6. 如何在Linux上安装Tomcat

    Tomcat需要JDK的支持,所以安装Tomcat前先安装JDK. 一.首先到JDK官网下载与自己机器相应的JDK. 注意机器位数,Linux系统的话可以用uname -a命令查看系统信息,如果是Ub ...

  7. poj 2492 并查集

    思路:当a,b的根节点find(a)与find(b)不同时,就直接将这两个数连接起来.由于每个树的根节点的kind值一定为0,所以,对于a,b的kind值相同,我们就讲其中一个根的kind值变为1,当 ...

  8. 锋利的jQuery第2版学习笔记1~3章

    第1章,认识jQuery 注意:使用的jQuery版本为1.7.1 目前流行的JavaScript库 Prototype(http://www.prototypejs.org),成型早,面向对象的思想 ...

  9. Java加密解密相关

    关于解释加密解密中的填充方案: http://laokaddk.blog.51cto.com/368606/461279/ 关于对称加密中的反馈模式: http://blog.csdn.net/aaa ...

  10. 新年第一次分享sqlserver技术

    走向DBA[MSSQL篇] - 从SQL语句的角度提高数据库的访问性能 最近公司来一个非常虎的DBA,10几年的经验,这里就称之为蔡老师吧,在征得我们蔡老同意的前提下 ,我们来分享一下蔡老给我们带来的 ...