入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

Spark笔记:RDD基本操作(下)

创建时间:2016-11-29 投稿人: 浏览次数:2529

 上一篇里我提到可以把RDD当作一个数组,这样我们在学习spark的API时候很多问题就能很好理解了。上篇文章里的API也都是基于RDD是数组的数据模型而进行操作的。

  Spark是一个计算框架,是对mapreduce计算框架的改进,mapreduce计算框架是基于键值对也就是map的形式,之所以使用键值对是人们发现世界上大部分计算都可以使用map这样的简单计算模型进行计算。但是Spark里的计算模型却是数组形式,RDD如何处理Map的数据格式了?本篇文章就主要讲解RDD是如何处理Map的数据格式。

  Pair RDD及键值对RDD,Spark里创建Pair RDD也是可以通过两种途径,一种是从内存里读取,一种是从文件读取。

  首先是从文件读取,上篇里我们看到使用textFile方法读取文件,读取的文件是按行组织成一个数组,要让其变成map格式就的进行转化,代码如下所示:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 /*  * 测试文件数据:  * x01,1,4    x02,11,1 x01,3,9 x01,2,6    x02,18,12    x03,7,9  *  * */ val rddFile:RDD[(String,String)] = sc.textFile("file:///F:/sparkdata01.txt"1).map { x => (x.split(",")(0),x.split(",")(1) + "," + x.split(",")(2)) } val rFile:RDD[String] = rddFile.keys println("=========createPairMap File=========") println(rFile.collect().mkString(","))// x01,x02,x01,x01,x02,x03 println("=========createPairMap File=========")

  我们由此可以看到以读取文件方式构造RDD,我们需要使用map函数进行转化,让其变成map的形式。

  下面是通过内存方式进行创建,代码如下:

1 2 3 4 5 val rdd:RDD[(String,Int)] = sc.makeRDD(List(("k01",3),("k02",6),("k03",2),("k01",26))) val r:RDD[(String,Int)] = rdd.reduceByKey((x,y) => x + y) println("=========createPairMap=========") println(r.collect().mkString(","))// (k01,29),(k03,2),(k02,6) println("=========createPairMap=========")

  RDD任然是数组形式,只不过数组的元素是("k01",3)格式是scala里面特有的Tuple2及二元组,元组可以当作一个集合,这个集合可以是各种不同数据类型组合而成,二元组就是只包含两个元素的元组。

  由此可见Pair RDD也是数组,只不过是一个元素为二元组的数组而已,上篇里对RDD的操作也是同样适用于Pair RDD的。

  下面是Pair RDD的API讲解,同样我们先说转化操作的API:

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。