Spark 4. RDD 操作二 常用的 Transformations 与 Actions 方法

RDD 操作二 常用的 Transformations 与 Actions 方法

原文地址: http://spark.apache.org/docs/latest/programming-guide.html#transformations
仅限交流使用,转载请注明出处。如有错误,欢迎指出!

Henvealf/译

Transformations 转换

这里只有 Scala 的API,Java 与 Python 请看官方API。

Transformation 啥意思啊
map(func) 返回每个元素经过 func 方法处理后,所生成的新元素所组成的分布式数据集合(RDD)。
filter(func) 返回一个通过了方法 func 筛选的元素所组成的数据集合;func 返回 true,即代表通过筛选。
flatMap(func) 与 map 相似,不过每一个输入项能够被映射为0个或多个输出项(所以 func 应该返回一个Seq(队列) 而不是一个单项)。
mapPartitions(func) 与 map 相似,但是他是单独运行在 RDD 的每一个分区(块)上,所以假如 RDD 是类型 T 时,则 func 的类型必须为 Iterator<T> => Iterator<U> 。
mapPartitionsWithIndex(func) 与 mapPartitions 相似,但是会另外提供一个整数值代表分区的下标(index), 所以假如 RDD 是类型 T 时,func 的类型必须为 (Int, Iterator<T>) => Iterator<U>.
sample(withReplacement, fraction, seed) 第一参数是指明是否放回,第二个参数是抽取数量,第三个是随机种子。
union(otherDataset) 返回一个包含了源数据集和参数的新数据集
intersection(otherDataset) 返回一个元数据集与参数的相交之后的新的 RDD(就是交集)。
distinct([numTasks]) 对数据集进行去重操作
groupByKey([numTasks]) 当在一个(K,V)数据集上调用他,会返回一个 (K, Iterator<V>) 数据集。 注意 :当你分组他们是为了在每个Key上聚合他们(比如求和或者平均值),使用 reduceByKey 或者 aggregateByKey 将会收益到更高的性能。注意 :输出的并发水平依赖于父 RDD 分区的个数。你能通过可选的 numTasks 参数设置不同的 task 数目。
reduceByKey(func, [numTasks]) 当在一个(K,V)数据集上调用他时,将会返回一个在不同的key上进行了聚合了Value的新的 (K,V) 数据集,聚合的方式是使用 func 方法指定,且必须是 (V,V) => V 类型的。 与 groupByKey 很像,reduce task 的个数是使用第二个可选参数指定的。
aggregateByKey(zeroValue)(seqOp, combOp, [NumTasks]) 当在一个(K,V)类型的数据集上调用他时,他就会返回一个按照 key 来进行聚合后生成的 (K,U) 对,聚合的方式是通过提供一个合并方法和一个中立的“零”值来完成的。允许被聚合的 value 的类型与输入的 value 的类型不一样,这样可以禁止没必要的分配。和 groupByKey相似,reduce task 的个数是使用第二个可选参数指定的。
sortByKey([ascending],[numTasks]) 在(K,V)类型上调用他以实现按 K 排序。返回排序后的键值对。使用第一参数(boolean)值来决定是否为升序。
join(otherDataset, [numTasks]) 通过该方法可以按照 K 来将源数据集合与另一数据集合进行 join 操作。(K, V) 和 (K, W) join结果就是 (K,(V,W))。outer join 就直接使用 leftOuterJoin,rightOuterJoin,fullOuterJoin 。
cogroup(otherDataset,[numTasks]) 当在 (K, V) 类型与 (K, W)类型调用该方法时,会返回一个元祖 (K, (Iterable<V>, Iterable<W>)) 。也可以使用 groupWith 来调用。
cartesian(otherDataset) 当在 T 类型与 U类型 的数据集上调用他,就返回一个 (T,U) 类型的数据集(所有元素组成的键值对)。
pipe(command,[envVars]) 通过 shell 命令将 RDD 的每个分区进行导流, RDD 元素就可以写入到进程的 stdin(标准输入) ,也可以按照字符串的形式将其来按行输出的 stdout(标准输入)
repatition(numPartitions) 通过重新修改 partition 的个数来对 RDD 中的数据重新进行洗牌,以平衡分区。他总是对网络上的所有数据进行重洗。

Actions 动作

Action 用法
reduce(func) 使用一个 func 来聚合一个数据集,方法应该为两个参数,一个返回值。这个方法必须能够翻转与连接,以至于能够在并发运行时的计算是正确的。
collect() 以数组的形式返回在驱动器上的数据集的所有元素。当一个过滤器或者其他操作返回了一个小的子集时,使用这个方法会变得非常高效。
first() 返回数据集行的第一个元素。
take(n) 以数组的形式返回数据集上的前 n 个元素。
takeSample(withReplacement, num, [seed]) 返回抽样后的数据组成的数组,第一个参数是时候放回取样,第二个就是取样的个数,第三个可选的参数是取样种子。
takeOrdered(n, [ordering]) 返回 RDD 排序后的前 n 个元素。排序方式要么就使用原生的排序方式,要么使用自定义的比较器排序,使用第二个可选参数传入。
saveAsTextFile(path) 将数据集中的元素写成一个文本文件,或者多个文本问价,参数就是文件路径,可以写在本地文件系统,HDFS,或者其他 Hadoop 支持的文件系统中。Spark 会在每一个元素上调用 toString 方法,转成文本文件中的一行文本。
saveAsSequenceFile(path) --Java and Scala 就是将 RDD 中的元素写成 Hadoop SequenceFile到本地文件系统,HDFS,或者其他 Hadoop 支持的文件系统。 且 RDDs 中可用的的键值对必须实现 Hadoop 的 Writable 接口。在 Scala 中,也有许多可用的能够隐含的转型为 Writable 的类型,例如 Int, Double, String。
savaAsObjectFile(path) --Java and Scala 使用 Java 简单的序列化方式,将 RDD 中的元素进行序列化。 可以使用 SparkContext.objectFile() 方法来加载。
countByKey() 按照 数据集中的 Key 进行分组,计算各个 K 的对应的个数。(K,V)返回 (K,Int)
foreach(func) 在数据集上的每个元素上运行 func 方法。上面提到了。

Spark RDD API 也提供了一些 action 的异步版本,比如 foreach 对应的 foreachAsync 。

End!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,056评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,842评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,938评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,296评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,292评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,413评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,824评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,493评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,686评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,502评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,553评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,281评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,820评论 3 305
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,873评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,109评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,699评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,257评论 2 341

推荐阅读更多精彩内容