spark常见RDD算法演示

 1.sparkRDD大致总体上可以分成两个bufe一个是Value类型和Key-Value类型

1.1Value型

1.1.1map((func)函数 

作用 :返回一个新的RDD,该RDD由每一个输入元素经过func函数转换后组成

需求:创建一个1-10数组的RDD,将所有元素*2形成新的RDD

1.1.2 mapPartitions(func) 

作用 :类似于map,但独立地在RDD的每一个分片上运行,因此在类型为T的RDD上运行时,func的函数类型必须是Iterator[T] => Iterator[U]。假设有N个元素,有M个分区,那么map的函数的将被调用N次,而mapPartitions被调用M次,一个函数一次处理所有分区。

需求:创建一个1-10数组的RDD,将所有元素*2形成新的RDD

1.1.3 mapPartitionsWithIndex(func)

作用 :类似于mapPartitions,但func带有一个整数参数表示分片的索引值,因此在类型为T的RDD上运行时,func的函数类型必须是(Int, Interator[T]) => Iterator[U];

2. 需求:创建一个RDD,使每个元素跟所在分区形成一个元组组成一个新的RDD


1.2.3:flatMap(func)

作用 :类似于map,但是每一个输入元素可以被映射为0或多个输出元素(所以func应该返回一个序列,而不是单一元素)

使用flatMap()函数的时候注意点不能传递一个常量要传递一个是可序列化迭代的数据集falgMap()类似一个扁平化折叠来看

需求:创建一个元素为1-5的RDD,运用flatMap创建一个新的RDD,新的RDD为原RDD的每个元素的2倍

flatMap()函数传参数的时候一定要注意函数的输入值和输出值是什么.scala里面对于flatmap函数的返回值是一个可以迭代的值所以这个时候

1.2.4:glom(func)函数

1. 作用:将每一个分区形成一个数组,形成新的RDD类型时RDD[Array[T]]

需求:创建一个2个分区的RDD,并将每个分区的数据放到一个数组,同时计算这个这个数组的最大值

groupBy()函数

1. 作用:分组,按照传入函数的返回值进行分组。将相同的key对应的值放入一个迭代器。

2. 需求:创建一个RDD,按照元素模以2的值进行分组


2.3.1.8 filter(func)

1. 作用:过滤。返回一个新的RDD,该RDD由经过func函数计算后返回值为true的输入元素组成。

2. 需求:创建一个RDD(由字符串组成),过滤出一个新RDD(包含”xiao”子串)

9 sample(withReplacement, fraction, seed)

参数1. withReplacement : true(抽出的数据放回) scala 底层采用的是泊松分布算法

:flase(抽样的数据不放回) scala底层采用的柏努力算法

参数2:以指定的随机种子随机抽样出数量为fraction的数

参数3: seed用于指定随机数生成器种子

作用:以指定的随机种子随机抽样出数量为fraction的数据,withReplacement表示是抽出的数据是否放回,true为有放回的抽样,false为无放回的抽样,seed用于指定随机数生成器种子。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。