spark_rdd练习
1.并行化创建RDD
-
通过并行化生成rdd
scala> var rdd1 = sc.parallelize(List(123,32,44,55,66,77,88,999))
rdd1: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at :24 -
查看该RDD的分区数量
scala> rdd1.partitions.length
res6: Int = 4 -
创建时指定分区数量
scala> var rdd1 = sc.parallelize(List(123,234,345,456,567,678,789,890),3)
rdd1: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[1] at parallelize at :24
2.sortBy,filter
-
对rdd1里的每个元素乘以2,然后排序
创建数组
scala> val rdd1 = sc.parallelize(List(1,2,9,4,22,6))
rdd1: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[4] at parallelize at :24
元素2
scala> val rdd2 = rdd1.map(x => x2).collect
rdd2: Array[Int] = Array(2, 4, 18, 8, 44, 12)
倒序
scala> val rdd3 = rdd1.map(*2).sortBy(x =>x,false).collect
rdd3: Array[Int] = Array(44, 18, 12, 8, 4, 2)
正序加分区
scala> val rdd3 = rdd1.map(*2).sortBy(x =>x,true,3).collect
rdd3: Array[Int] = Array(2, 4, 8, 12, 18, 44)
知识点:
Spark内有collect方法,是Action操作里边的一个算子,这个方法可以将RDD类型的数据转化为数组,同时会从远程集群是拉取数据到driver端。
sortBy函数是在org.apache.spark.rdd.RDD类中实现的,sortBy第一个参数是一个函数,该函数的也有一个带T泛型的参数,返回类型和RDD中元素的类型是一致的;第二个参数是ascending,从字面的意思大家应该可以猜到,是的,这参数决定排序后RDD中的元素是升序还是降序,默认是true,也就是升序;sortBy第三个参数是numPartitions,该参数决定排序后的RDD的分区个数,默认排序后的分区个数和排序之前的个数相等,即为this.partitions.size。 -
过滤出大于等于50的元素
创建数组
scala> val rdd1 = sc.parallelize(List(1,4,6,88,99))
rdd1: org.apache.spark.rd