Spark转换(transform)与动作(action)一览

来源:互联网 发布:网络集成版驱动精灵 编辑:程序博客网 时间:2024/06/01 07:21
【说的很特么抽象,能看得懂算你厉害啊,所以代码详解:一个Spark Demo与代码详解
以下func,大部分时候为了让逻辑更清楚,推荐使用匿名函数!(lambda)】
【ps:java和python的api是一样的,名字和参数没有变化】
转换含义map(func)每一个输入元素经过func函数转换后输出一个元素filter(func)返回经过 func 函数计算后返回值为 true 的输入元素组成的一个新数据集flatMap(func)类似于 map,但是每一个输入元素可以被映射为0或多个输出元素,因此 func 应该返回一个序列mapPartitions(func)类似于 map,但独立地在 RDD 的每一个分块上运行,因此在类型为 T 的 RDD 上运行时,func 的函数类型必须是 Iterator[T] ⇒ Iterator[U]mapPartitionsWithSplit(func)类似于 mapPartitions, 但 func 带有一个整数参数表示分块的索引值。因此在类型为 T的RDD上运行时,func 的函数类型必须是 (Int, Iterator[T]) ⇒ Iterator[U]sample(withReplacement,fraction, seed)根据 fraction 指定的比例,对数据进行采样,可以选择是否用随机数进行替换,seed 用于指定随机数生成器种子union(otherDataset)返回一个新的数据集,新数据集是由源数据集和参数数据集联合而成distinct([numTasks]))返回一个包含源数据集中所有不重复元素的新数据集groupByKey([numTasks])在一个键值对的数据集上调用,返回一个(K,Seq[V])对的数据集 。注意:默认情况下,只有8个并行任务来做操作,但是你可以传入一个可选的 numTasks 参数来改变它reduceByKey(func, [numTasks])在一个键值对的数据集上调用时,返回一个键值对的数据集,使用指定的 reduce 函数,将相同 key 的值聚合到一起。类似 groupByKey,reduce 任务个数是可以通过第二个可选参数来配置的sortByKey([ascending], [numTasks])在一个键值对的数据集上调用,K 必须实现 Ordered 接口,返回一个按照 Key 进行排序的键值对数据集。升序或降序由 ascending 布尔参数决定join(otherDataset, [numTasks])在类型为(K,V)和(K,W) 类型的数据集上调用时,返回一个相同key对应的所有元素对在一起的 (K, (V, W)) 数据集cogroup(otherDataset, [numTasks])在类型为(K,V)和(K,W) 的数据集上调用,返回一个 (K, Seq[V], Seq[W]) 元组的数据集。这个操作也可以称之为 groupwithcartesian(otherDataset)笛卡尔积,在类型为 T 和 U 类型的数据集上调用时,返回一个 (T, U) 对数据集(两两的元素对)pipe(command, [envVars])对 RDD 进行管道操作coalesce(numPartitions)减少 RDD 的分区数到指定值。在过滤大量数据之后,可以执行此操作repartition(numPartitions)重新给 RDD 分区repartitionAndSortWithinPartitions(partitioner)重新给 RDD 分区,并且每个分区内以记录的 key 排序

动作含义reduce(func)通过函数 func 聚集数据集中的所有元素。这个功能必须可交换且可关联的,从而可以正确的被并行执行。collect()在驱动程序中,以数组的形式,返回数据集的所有元素。这通常会在使用 filter 或者其它操作并返回一个足够小的数据子集后再使用会比较有用。count()返回数据集的元素的个数。first()返回数据集的第一个元素,类似于 take(1)take(n)返回一个由数据集的前 n 个元素组成的数组。注意,这个操作目前并非并行执行,而是由驱动程序计算所有的元素takeSample(withReplacement,num, seed)返回一个数组,在数据集中随机采样 num 个元素组成,可以选择是否用随机数替换不足的部分,seed 用于指定的随机数生成器种子takeOrdered(n, [ordering])返回自然顺序或者自定义顺序的前 n 个元素saveAsTextFile(path)将数据集的元素,以 textfile 的形式,保存到本地文件系统,HDFS或者任何其它 hadoop 支持的文件系统。对于每个元素,Spark 将会调用 toString 方法,将它转换为文件中的文本行saveAsSequenceFile(path) (Java and Scala)将数据集的元素,以 Hadoop sequencefile 的格式保存到指定的目录下saveAsObjectFile(path) (Java and Scala)将数据集的元素,以 Java 序列化的方式保存到指定的目录下countByKey()对(K,V)类型的 RDD 有效,返回一个 (K,Int) 对的 Map,表示每一个key对应的元素个数foreach(func)在数据集的每一个元素上,运行函数 func 进行更新。这通常用于边缘效果,例如更新一个累加器,或者和外部存储系统进行交互,例如 HBase

原创粉丝点击