Spark之核心---RDDs(2)

来源:互联网 发布:python数字转换字符串 编辑:程序博客网 时间:2024/06/05 10:38

前言

在第一章,已经介绍过了RDDs的基本概念,创建方法和特性。那么在本章将介绍RDD的基本操作方法。如果没看过第一篇的点击链接:Spark之核心—RDDs(1)

RDD基本操作方法之Transformation

顾名思义,Transformation时转换的意思,在RDD中的含义就是从之前的RDD构建一个新的RDD,像map(),filter()等。下面将具体介绍这些操作方法:

  • map():想必熟悉编程的朋友对这个函数并不陌生,是映射的意思,生成的结果将是一个键值对。举个例子val lines2 = lines.map(word => (word,1))
    其中:
scala> val lines = sc.textFile("../testfile/test")scala> lines.foreach(println)Hello Spark!I love xyj!I love zyh! Hello World!

lines的内容如上所示,lines2是对lines这个RDD的操作结果的一个新RDD,我们来看一下结果:

scala> lines2.foreach(println)(I love xyj!,1)(I love zyh! ,1)(Hello Spark!,1)(Hello World!,1)即把行数据映射成键值对的形式,由于没有split分词,所以每行就当作一个单词吧。
  • filter():返回值包含满足filter函数元素的新RDD,在前一篇已经应用过。
  • flatmap():对每个输入元素,输出多个输出元素,将所有的存在一个数组中。更形象的理解为将多个RDD压扁的意思,返回一个新的RDD。例如:[1,2,3,4],[5,6,7,8],flatmap的结果为:[1,2,3,4,5,6,7,8]
  • 集合运算包括去重,交并集,等各种操作

RDD基本操作方法之Action

Action:最终计算出一个结果,形式如count(),save,driver program或者存在文件系统中。

  • reduce():累加,计数,其他类型的聚集操作。
    例如:
val rdd = sc.parallelize(Array(1,2,3,3))rdd.reduce((x,y) => x+y)结果为: 1+2+3+3 = 10
  • collect():遍历整个RDD,向driver pogram返回RDD的内容。不过利用collect的时候要注意内存问题,当数据量不是很大时,利用collect可以,但是有大量数据容量超过内存时,就要利用saveAsTextFile()等action操作。
  • take (n):返回RDD的n个元素(同时尝试访问最少的分区),是随机无序的。
  • top():比较器
  • foreach():输出RDD内容,不返回到本地,配合print或者其他输出函数打印出数据,方便测试使用。

key-value对型RDDs的操作

由于key-value型的RDD在spark中应用广泛,所以这部分单独拿出来总结一下。

  • 创建:利用map()函数创建。
  • 操作:
    1.combineByKey(createCombiner,mergeValue,mergeCombiners,partitioner):遍历所有的分区(partitions),如果是新的key值,就调用createCombiner,如果已经遍历过这个key值,就调用vergeValue,之后再合计整合每个分区得到的结果汇总mergeCombiners。这个函数是最为常见的基于key的聚合函数,返回类型可以与输入类型不一样。下面举个例子,求两个人的成绩总和:
(jake,80.0)(jake,90.0)(jake,85.0)(mike,85.0)(mike,92.0)(mike,90.0) 以上是原始数据,下面定义函数: combineByKey( score => (1,score); (c1: (Int,Double), newScore) => (c1._1,c1._2+newScore)); (c1:(Int,Double), c2:(Int,Double) => (c1._1+c2._1,c1._2+c2._2)) 其中scorevalue值,(1,score)中的1表示第一次出现,记为1.Int表示几门课。

2.reduceByKey(func)

eg:{(1,2),(3,4),(3,6)}rdd.reduceByKey((x,y) => x+y)得到结果:{(1,2),(3,10)}

3.groupByKey():相同key的分到一个组。
4.mapValues(func):对每个key中的每个value值进行相同操作。
5.flatMapValues:符号化的时候使用。
6.keys(),values()返回key和value值。
7.sortByKey():按照key排序返回RDD

原创粉丝点击