0. RDD是什么?
RDD是Spark中的抽象数据结构类型,任何数据在Spark中都被表示为RDD。从编程的角度来看,RDD可以简单看成是一个数组。和普通数组的区别是,RDD中的数据是分区存储的,这样不同分区的数据就可以分布在不同的机器上,同时可以被并行处理。因此,Spark应用程序所做的无非是把需要处理的数据转换为RDD,然后对RDD进行一系列的变换和操作从而得到结果。
1.创建RDD(主要使用以下两种方式来创建RDD)
方式1:从普通数组(List和Array)创建RDD
collect() 返回RDD所有元素
scala> val a =sc.parallelize(1 to 9,3)
/*里面包含了1到9这9个数字,它们分别在3个分区中。*/
a: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[1] at parallelize at <console>:24
/* List */
scala>val rdd01 = sc.makeRDD(List(1,2,3,4,5,6))
val r01 = rdd01.map { x => x * x }
println(r01.collect().mkString(","))
1,4,9,16,25,36
/* Array */
val rdd02 = sc.makeRDD(Array(1,2,3,4,5,6))
val r02 = rdd02.filter { x => x < 5}
println(r02.collect().mkString(","))
1,2,3,4
方式2:读取文件README.md来创建RDD,文件中的每一行就是RDD中的一个元素
scala> val b = sc.textFile("README.md")
b: org.apache.spark.rdd.RDD[String] = README.md MapPartitionsRDD[5] at textFile at <console>:2
2 .map和filter
map:参数是函数,函数应用于RDD每一个元素,返回值是新的RDD。换句话说是对RDD中的每个元素都执行一个指定的函数来产生一个新的RDD。任何原RDD中的元素在新RDD中都有且只有一个元素与之对应。
filter:参数是函数,函数会过滤掉不符合条件的元素,返回值是新的RDD。
eg1:对a里的每个元素乘以2,然后排序
scala> val a = sc.parallelize(List(1,2,3,4,5))
scala> val b = a.map(_*3).collect
b: Array[Int] = Array(3, 6, 9, 12, 15)
/*true是升序排序,false是降序排序*/
scala> val c = a.map(_*2).sortBy(x =>x,true).collect
c: Array[Int] = Array(2, 4, 6, 8, 10)
scala> val d = a.map(_*2).sortBy(x =>x,false).collect
d: Array[Int] = Array(10, 8, 6, 4, 2)
ex2:过滤出大于20的数和偶数
scala> val a = sc.parallelize(List(1,22,100,5,56)).filter(_>20).collect
a: Array[Int] = Array(22, 100, 56)
scala> val a = sc.parallelize(List(1,22,100,5,55)).filter(_%2==0).collect
a: Array[Int] = Array(22, 100)
3 .map和flatMap
与map类似,区别是原RDD中的元素经map处理后只能生成一个元素,而原RDD中的元素经flatmap处理后可生成多个元素来构建新RDD。
eg3:仔细感受map和flatMap的区别
scala> val a = sc.parallelize(Array("china","is","Strong"))
a: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[35] at parallelize at <console>:24
/* map */
scala> a.map(_.split(" ")).collect
res3: Array[Array[String]] = Array(Array(china), Array(is), Array(Strong))
/* flatMap 分开并压平了*/
scala> val a = sc.parallelize(Array("china","is","Strong")).flatMap(_.split(" ")).collect
a: Array[

本文介绍了Spark中的核心数据结构RDD,包括如何创建、转换和操作RDD。通过实例解析了map、filter、flatMap、union、intersection、distinct、subtract、sortBy、groupBy、groupByKey、reduceByKey、sortByKey、join、reduce和foreach等关键API的用法,适合初学者掌握Spark编程基础。
最低0.47元/天 解锁文章
1431

被折叠的 条评论
为什么被折叠?



