Spark Programming--Transformations
map
将RDD中的每个数据项,一对一的映射关系,RDD数目不变,分区数也不变
例子:
数据集:

map操作:


flatMap
和map一样,但是会拆分每一个map之后的list,可以理解为一对多(注:会把字符串当作数组然后拆分)
例子:

distinct
对RDD的数据项进行去重操作
例子:

coalesce
def coalesce(numPartitions: Int, shuffle: Boolean = false)(implicit ord: Ordering[T] = null): RDD[T]
功能:对RDD进行重分区,使用HashPartitioner。
参数1:重分区的数目
参数2:是否进行shuffle,默认为false(注:一般用coalesce比repartition的好处就是可以不需要shuffle)
例子:(我虚拟机给了两个核,默认就成两个分区了,并且大于2也不行,或许分区数与可用处理器数量有关,网上有说如果分区大于当前分区就要设参数为true,不过我把分区为1的设为2也成功了,大数据不知道是否可行)

repartition
def repartition(numPartitions: Int)(implicit ord: Ordering[T] = null): RDD[T]
也是重新分区,会进行shuffle工作,给一个分区数就ok了(对于大量小任务,Spark有自己的分区机制,如果强制设为一些较小的分区数,说不定可以加快程序)
例子

randomSplit
def randomSplit(weights: Array[Double], seed: Long = Utils.random.nextLong): Array[RDD[T]]
将一个RDD随机切分成多个RDD, 切分根据为double数组
第二个参数为random的种子,基本可忽略。
例子:

union
def union(other: RDD[T]): RDD[T]
将两个RDD合并,不去重
例子:

intersection
返回两个RDD的交集,并且去重
def intersection(other: RDD[T]): RDD[T]
def intersection(other: RDD[T], numPartitions: Int): RDD[T]
def intersection(other: RDD[T], partitioner: Partitioner)(implicit ord: Ordering[T] = null): RDD[T]
numPartitions:指定返回的RDD的分区数。
partitioner:指定分区函数
例子:

subtract
返回在RDD出现但是不在otherRDD出现的数据项集合,不去重
def subtract(other: RDD[T]): RDD[T]
def subtract(other: RDD[T], numPartitions: Int): RDD[T]
def subtract(other: RDD[T], partitioner: Partitioner)(implicit ord: Ordering[T] = null): RDD[T]
例子:

mapPartitions
mapPartitionsWithIndex
zip
def zip[U](other: RDD[U])(implicit arg0: ClassTag[U]): RDD[(T, U)]
作用:将两个RDD组合成Key/Value形式的RDD
注意:默认两个RDD的partition数量以及元素数量都相同,否则会抛出异常
例子:

zipPartitions
zipWithIndex
def zipWithIndex(): RDD[(T, Long)]
将RDD中的元素和这个元素在RDD中的ID(索引号)组合成键/值对(可用于编号)(不同机器可能会冲突)
例子:

zipWithUniqueId
def zipWithUniqueId(): RDD[(T, Long)]
该函数将RDD中元素和一个唯一ID组合成键/值对,该唯一ID生成算法如下:
每个分区中第一个元素的唯一ID值为:该分区索引号,
每个分区中第N个元素的唯一ID值为:(前一个元素的唯一ID值) + (该RDD总的分区数)
例子:(尽管在不同的机器中分别编号,整个RDD中也不会重复,注意区别于zipWithIndex())

partitionBy
def partitionBy(partitioner: Partitioner): RDD[(K, V)]
该函数根据partitioner函数生成新的ShuffleRDD,将原RDD重新分区
mapValues
def mapValues[U](f: (V) => U): RDD[(K, U)]
同基本转换操作中的map,只不过mapValues是针对[K,V]中的V值进行map操作
例子:

flatMapValues
def flatMapValues[U](f: (V) => TraversableOnce[U]): RDD[(K, U)]
同基本转换操作中的flatMap,只不过flatMapValues是针对[K,V]中的V值进行flatMap操作
例子:

reduceByKey
根据key-value中的key将RDD合并,等于key唯一了
def reduceByKey(func: (V, V) => V): RDD[(K, V)]
def reduceByKey(func: (V, V) => V, numPartitions: Int): RDD[(K, V)]
def reduceByKey(partitioner: Partitioner, func: (V, V) => V): RDD[(K, V)]
该函数用于将RDD[K,V]中每个K对应的V值根据映射函数来运算。
参数numPartitions用于指定分区数;
参数partitioner用于指定分区函数;
例子:

groupByKey
def groupByKey(): RDD[(K, Iterable[V])]
def groupByKey(numPartitions: Int): RDD[(K, Iterable[V])]
def groupByKey(partitioner: Partitioner): RDD[(K, Iterable[V])]
该函数用于将RDD[K,V]中每个K对应的V值,合并到一个集合Iterable[V]中,
参数numPartitions用于指定分区数;
参数partitioner用于指定分区函数;
例子:

reduceByKeyLocally
def reduceByKeyLocally(func: (V, V) => V): Map[K, V]
该函数将RDD[K,V]中每个K对应的V值根据映射函数来运算,运算结果映射到一个Map[K,V]中,而不是RDD[K,V]。(在python中其实是dictionary)
例子:

combineByKey
foldByKey
subtractByKey
subtractByKey和基本转换操作中的subtract类似
这里是针对K的,返回在主RDD中出现,并且不在otherRDD中出现的元素。
参数numPartitions用于指定结果的分区数
参数partitioner用于指定分区函数

cogroup
运行失败
join
leftOuterJoin
rightOuterJoin
Spark Programming--Transformations的更多相关文章
- <Spark><Programming><RDDs>
		
Introduction to Core Spark Concepts driver program: 在集群上启动一系列的并行操作 包含应用的main函数,定义集群上的分布式数据集,操作数据集 通过 ...
 - 【Spark篇】---Spark中transformations算子二
		
一.前述 今天继续整理几个Transformation算子如下: mapPartitionWithIndex repartition coalesce groupByKey zip zipWithIn ...
 - 【Spark篇】---Spark中Transformations转换算子
		
一.前述 Spark中默认有两大类算子,Transformation(转换算子),懒执行.action算子,立即执行,有一个action算子 ,就有一个job. 通俗些来说由RDD变成RDD就是Tra ...
 - Spark Programming Guide《翻译》
		
转载必须注明出处:梁杰帆 在这里要先感谢原作者们!如果各位在这里发现了错误之处,请大家提出 1.Initializing Spark Spark程序必须做的第一件事就是创建一个SparkCon ...
 - <Spark><Programming><Loading and Saving Your Data>
		
Motivation Spark是基于Hadoop可用的生态系统构建的,因此Spark可以通过Hadoop MapReduce的InputFormat和OutputFormat接口存取数据. Spar ...
 - <Spark><Programming><Key/Value Pairs><RDD>
		
Working with key/value Pairs Motivation Pair RDDs are a useful building block in many programs, as t ...
 - Spark Streaming Transformations
		
map(func):对DStream中的所有的元素进行func转换生成新的DStream flatMap(func):和map方法类似,先对DStream中的元素进行func运算,然后压平,就是说,如 ...
 - Spark Streaming Programming Guide
		
参考,http://spark.incubator.apache.org/docs/latest/streaming-programming-guide.html Overview SparkStre ...
 - Apache Spark 2.2.0 中文文档 - GraphX Programming Guide | ApacheCN
		
GraphX Programming Guide 概述 入门 属性 Graph 示例属性 Graph Graph 运算符 运算符的汇总表 Property 运算符 Structural 运算符 Joi ...
 - Spark快速入门 - Spark 1.6.0
		
Spark快速入门 - Spark 1.6.0 转载请注明出处:http://www.cnblogs.com/BYRans/ 快速入门(Quick Start) 本文简单介绍了Spark的使用方式.首 ...
 
随机推荐
- POJ 3373 Changing Digits(DP)
			
题目链接 记录路径的DP,看的别人的思路.自己写的也不好,时间居然2000+,中间的取余可以打个表,优化一下. 写的各种错,导致wa很多次,写了一下午,自己构造数据,终于发现了最后一个bug. dp[ ...
 - oracle系列--第四篇 Oracle的卸载
			
对于oracle的卸载,是一件相对麻烦的事情,不像其他软件那样,我们可以根据卸载向导,就可以方便快捷地卸载软件. oracle的卸载,我们要涉及到修改注册表,重启计算机等操作. 我们有些时候有必要卸载 ...
 - asp.net 微信企业号办公系统-流程设计--保存与发布
			
如果流程未设计完时可以先保存,以后再打开接着设计.点击工具栏上的保存按钮即可保存当前流程设计: 如果下次要接着设计,则可以打开该流程继续设计: 如果流程设计完成,可以点击安装按钮来发布流程,流程安装成 ...
 - github配置
			
注册github账号: 准备秘钥文件: 认证: https://github.com 测试秘钥: 创建仓库: 执行下面命令创建git远程仓库: 添加一个two.txt文件:
 - ASP中可能出现的一种包含漏洞(Server.execute)
			
author: bin <% Server.execute(request(“file”)) %> 与include的区别,它可以动态包含文件. 被包含文件里面可执行ASP代码,在国外的源 ...
 - 用java简单的实现单链表的基本操作
			
package com.tyxh.link; //节点类 public class Node { protected Node next; //指针域 protected int data;//数据域 ...
 - [转]Multiple outputs from T4 made easy
			
本文转自:http://damieng.com/blog/2009/01/22/multiple-outputs-from-t4-made-easy One of the things I wante ...
 - 在Windows上启用LDAPs
			
公司的环境比较特殊, Windows server + Linux desktop, 所以我们希望在server端启用LDAP over SSL功能. 当中走了不少弯路, 网上文章也搜了一大堆, 千辛 ...
 - $_ 与 $PSItem
			
PowerShell 3.0 中的$PSItem 此文章于2012年11月4日发表在PowershellPowershell小技巧并加以Powershell 3.0管道的标签 by Mooser Le ...
 - 简单的form表单操作(Servlet)
			
Servlet模型 [表单的处理][模型(1)] ●HTML网页 <!DOCTYPE html> <html> <head> <meta charset=&q ...