学习笔记八

  今天学习了RDD被创建好以后,在后续使用过程中一般会发生两种操作:
    转换(Transformation): 基于现有的数据集创建一个新的数据集。
    行动(Action):在数据集上进行运算,返回计算值。

  进行转换操作时,并不会立即进行计算,只有进行行动操作时,才会进行计算。下面列出一些常见的转换操作(Transformation API):
  * filter(func):筛选出满足函数func的元素,并返回一个新的数据集
  * map(func):将每个元素传递到函数func中,并将结果返回为一个新的数据集
  * flatMap(func):与map()相似,但每个输入元素都可以映射到0或多个输出结果
  * groupByKey():应用于(K,V)键值对的数据集时,返回一个新的(K, Iterable)形式的数据集
  * reduceByKey(func):应用于(K,V)键值对的数据集时,返回一个新的(K, V)形式的数据集,其中的每个值是将每个key传递到函数func中进行聚合。

  下面列出一些常见的行动操作(Action API):
  * count() 返回数据集中的元素个数
  * collect() 以数组的形式返回数据集中的所有元素
  * first() 返回数据集中的第一个元素
  * take(n) 以数组的形式返回数据集中的前n个元素
  * reduce(func) 通过函数func(输入两个参数并返回一个值)聚合数据集中的元素
  * foreach(func) 将数据集中的每个元素传递到函数func中运行*

  创建键值对Rdd

  1.使用map()函数创建

  2.通过并行集合(数组)创建

  常用的键值对转换操作:reduceByKey()、groupByKey()、sortByKey()、join()、cogroup()

  reduceByKey(func):

  reduceByKey(func)的功能是,使用func函数合并具有相同键的值。比如,reduceByKey((a,b) => a+b),有四个键值对(“spark”,1)、(“spark”,2)、(“hadoop”,3)和(“hadoop”,5),对具有相同key的键值对进行合并后的结果就是:(“spark”,3)、(“hadoop”,8)。

  groupByKey():

  groupByKey()的功能是,对具有相同键的值进行分组。比如,对四个键值对(“spark”,1)、(“spark”,2)、(“hadoop”,3)和(“hadoop”,5),采用groupByKey()后得到的结果是:(“spark”,(1,2))和(“hadoop”,(3,5))。

  keys:

  keys只会把键值对RDD中的key返回形成一个新的RDD。比如,对四个键值对(“spark”,1)、(“spark”,2)、(“hadoop”,3)和(“hadoop”,5)构成的RDD,采用keys后得到的结果是一个RDD[Int],内容是{“spark”,”spark”,”hadoop”,”hadoop”}。

  values:

  values只会把键值对RDD中的value返回形成一个新的RDD。比如,对四个键值对(“spark”,1)、(“spark”,2)、(“hadoop”,3)和(“hadoop”,5)构成的RDD,采用keys后得到的结果是一个RDD[Int],内容是{1,2,3,5}。

  sortByKey():

  sortByKey()的功能是返回一个根据键排序的RDD。  

  mapValues(func):

  mapValues(func)的功能是不改变键的情况下,改变值。如,对四个键值对(“spark”,1)、(“spark”,2)、(“hadoop”,3)和(“hadoop”,5),执行rdd.mapValues(x => x+1)后的结果为(“spark”,2)、(“spark”,3)、(“hadoop”,4)和(“hadoop”,6)。

  join:

  join是连接操作,比如,rdd1是一个键值对集合{(“spark”,1)、(“spark”,2)、(“hadoop”,3)和(“hadoop”,5)},rdd2是一个键值对集合{(“spark”,”fast”)},那么,rdd1.join(rdd2)的结果就是一个新的RDD,这个新的RDD是键值对集合{(“spark”,1,”fast”),(“spark”,2,”fast”)}。

  

原文地址:https://www.cnblogs.com/liyuchao/p/12276162.html