[](()4. flatMap
函数定义
def flatMap[U: ClassTag](f: T => TraversableOnce[U]): RDD[U]
说明
将处理的数据进行扁平化后再进行映射处理,所以算子也称之为扁平映射 。
案例实操
package com.atguigu.bigdata.spark.core.rdd.operator.transform
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object Spark04_RDD_Operator_Transform {
def main(args: Array[String]): Unit = {
//TODO 准备环境
val sparkConf: SparkConf = new SparkConf().setMaster(“local[*]”).setAppName(“Operator”)
val sc = new SparkContext(sparkConf)
//TODO 算子
//输出每个数字
val rdd = sc.makeRDD(List(List(1,2),List(3,4)))
val flatRDD: RDD[Int] = rdd.flatMap(
list => {
list
}
)
flatRDD.collect().foreach(println)
//TODO 关闭环境
sc.stop()
}
}
[](()5. glom
函数定义
def glom(): RDD[Array[T]]
说明
将同一个分区的数据直接转换为相同类型的内存数组进行处理,分区不变
案例实操
package com.atguigu.bigdata.spark.core.rdd.operator.transform
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object Spark05_RDD_Operator_Transform {
def main(args: Array[String]): Unit = {
//TODO 准备环境
val sparkConf: SparkConf = new SparkConf().setMaster(“local[*]”).setAppName(“Operator”)
val sc = new SparkContext(sparkConf)
//TODO 算子
val rdd = sc.makeRDD(List(1,2,3,4),2)
//List => Int
//Int => Any
val glomRDD: RDD[Array[Int]] = rdd.glom()
glomRDD.collect().foreach(data => println(data.mkString(“,”)))
//TODO 关闭环境
sc.stop()
}
}
[](()6. groupBy
函数定义
def groupBy[K](f: T => K)(implicit kt: ClassTag[K]): RDD[(K, Iterable[T])]
说明
将数据根据指定的规则进行分组, 分区默认不变,但是数据会被打乱重新组合,我们将这样
的操作称之为shuffle。极限情况下,数据可能被分在同一个分区中。
一个组的数据在一个分区中,但是并不是说一个分区中只有一个组
案例实操
package com.atguigu.bigdata.spark.core.rdd.operator.transform
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object Spark06_RDD_Operator_Transform {
def main(args: Array[String]): Unit = {
//TODO 准备环境
val sparkConf: SparkConf = new SparkConf().setMaster(“local[*]”).setAppName(“Operator”)
val sc = new SparkContext(sparkConf)
//TODO 算子 -groupBy
val rdd = sc.makeRDD(List(1,2,3,4),2)
//groupBy会将数据源中的每一个数据进行分组判断,根据返回的分组key进行分组
//相同的key值的数组会放到一个组中
def groupByFunction(num :Int) : Int ={
num % 2
}
val groupRDD: RDD[(Int, Iterable[Int])] = rdd.groupBy(groupByFunction)
groupRDD.collect().foreach(println)
//TODO 关闭环境
sc.stop()
}
}
[](()7. filter
函数定义
def filter(f: T => Boolean): RDD[T]
说明
将数据根据指定的规则进行筛选过滤,符合规则的数据保留,不符合规则的数据丢弃。 当数据进行筛选过滤后,分区不变,但是分区内的数据可能不均衡,生产环境下,可能会出
现数据倾斜。
案例实操
package com.atguigu.bigdata.spark.core.rdd.operator.transform
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object Spark07_RDD_Operator_Transform {
def main(args: Array[String]): Unit = {
//TODO