RDD操作
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操作的更多相关文章
- Spark学习(一)--RDD操作
标签(空格分隔): 学习笔记 Spark编程模型的两种抽象:RDD(Resilient Distributed Dataset)和两种共享变量(支持并行计算的广播变量和累加器). RDD RDD是一种 ...
- Spark编程模型及RDD操作
转载自:http://blog.csdn.net/liuwenbo0920/article/details/45243775 1. Spark中的基本概念 在Spark中,有下面的基本概念.Appli ...
- Spark 键值对RDD操作
键值对的RDD操作与基本RDD操作一样,只是操作的元素由基本类型改为二元组. 概述 键值对RDD是Spark操作中最常用的RDD,它是很多程序的构成要素,因为他们提供了并行操作各个键或跨界点重新进行数 ...
- SPARKR,对RDD操作的介绍
(转载)SPARKR,对RDD操作的介绍 原以为,用sparkR不能做map操作, 搜了搜发现可以. lapply等同于map, 但是不能操作spark RDD. spark2.0以后, spar ...
- spark RDD操作的底层实现原理
RDD操作闭包外部变量原则 RDD相关操作都需要传入自定义闭包函数(closure),如果这个函数需要访问外部变量,那么需要遵循一定的规则,否则会抛出运行时异常.闭包函数传入到节点时,需要经过下面的步 ...
- Spark性能优化(2)——广播变量、本地缓存目录、RDD操作、数据倾斜
广播变量 背景 一般Task大小超过10K时(Spark官方建议是20K),需要考虑使用广播变量进行优化.大表小表Join,小表使用广播的方式,减少Join操作. 参考:Spark广播变量与累加器 L ...
- 【spark】RDD操作
RDD操作分为转换操作和行动操作. 对于RDD而言,每一次的转化操作都会产生不同的RDD,供一个操作使用. 我们每次转换得到的RDD是惰性求值的 也就是说,整个转换过程并不是会真正的去计算,而是只记录 ...
- 【Spark】RDD操作具体解释4——Action算子
本质上在Actions算子中通过SparkContext运行提交作业的runJob操作,触发了RDD DAG的运行. 依据Action算子的输出空间将Action算子进行分类:无输出. HDFS. S ...
- 4.RDD操作
目录 一. RDD创建 从本地文件系统中加载数据创建RDD 从HDFS加载数据创建RDD 通过并行集合(列表)创建RDD 二. RDD操作 转换操作 filter(func) map(func) fl ...
随机推荐
- QNetworkAccessManager的异步与线程
Qt版本5.1.1 以HTTP操作为例 Qt中的HTTP操作都是异步的. 内部通过线程实现 创建线程的时机在QNetworkReplyHttpImplPrivate::postRequest() vo ...
- 如何使用数据卷在宿主机和docker容器之间共享文件
共享宿主机的目录给容器 docker run -i -t -v ~/download:/home/hello python3-env /bin/bash -v 表示创建一个数据卷并挂载到容器里 ~/ ...
- JSON 日期格式问题 /Date(1325696521000)/
json返回的日期格式/Date(1325696521000)/,怎么办? Controller返回的是JsonResult对象就会导致出现这样的格式: /Date(1325696521000)/ p ...
- NSFileManager文件管理
前提,用到的东东: 1.文件数据类:NSData类型(二进制) 1)作用:专门用于将数据封装成二进制的类.数据(文本,图片,音频,视频....) ==> NSData类型的对象 2)编码方式: ...
- python(1) - 条件判断和循环
条件判断: 比如输入用户年龄,根据年龄打印不同的内容,在python中用if语句实现: age = 20 if age >= 18: print('你可以看这个视频!') 可以给if加一个els ...
- 【安卓面试题】使用SQLiteOpenHelper的getReadableDatabase()获得的数据库能不能,做写的操作
可以! 不要被Readable的意思误导啦,readable是可读的意思,但不代表不能写哦. getReadableDatabase() 会获取用于操作SQLiteDatabase的实例. getRe ...
- 安装Laravel之坎坷记述
写这篇文章记录以及分享我安装Laravel框架的一些经验 过程如下: 1.按照官方的描述,第一步是先安装composer来管理依赖=>composer下载传送门 下载之后点击安装,按照提示它需要 ...
- [改善Java代码]避免带有变长参数的方法重载
建议4: 避免带有变长参数的方法重载 在项目和系统的开发中,为了提高方法的灵活度和可复用性,我们经常要传递不确定数量的参数到方法中,在Java 5之前常用的设计技巧就是把形参定义成Collection ...
- 关于Eclipse插件之IWorkbench IWorkbenchWindow IWorkbenchPage |WorkbenchPart......等的总结
1..IWorkbench: workbench是eclipse用户界面中最底层的对象,它建立在Display之上,包含一个或多个IWorkbenchWindow,用于向终端用户呈现信息 当你的wor ...
- 一步步搭建自己的轻量级MVCphp框架-(一)什么是PHP框架以及MVC设计模式
PHP框架 php框架对很多新手而言可能会觉得很难攀越,其实不然 ,只要知道一个框架的流程,明白原理了,基本类似框架都可以看懂,php框架真正的发展要从php5开始了,其实php4时代就有一些框架,但 ...