RDD入门及三种算子
//Map算子
@Test
def mapTest(): Unit = {
//1.创建RDD
val rdd1: RDD[Int] = sc.parallelize(Seq(1, 2, 3))
//2.执行Map操作
val rdd2: RDD[Int] = rdd1.map(item => item * 10)
//3.得到结果
val result: Array[Int] = rdd2.collect()
result.foreach(goods => println(goods))
}
@Test //flatMap:1.把RDD中的数据转换为数据或者集合形式 2.把集合或者数组展开 3. 生成了多条数据 flatMap是一对多
def flatMapTest(): Unit = {
//1.创建RDD
val rdd1: RDD[String] = sc.parallelize(Seq("hello lily", "hello lucy", "hello tim"))
//2.处理数据
val rdd2: RDD[String] = rdd1.flatMap(item => item.split(" ")) //拆分数组为一个个单词
//3.得到结果
val result: Array[String] = rdd2.collect()
result.foreach(item => println(item))
//4.关闭sc
sc.stop()
}
@Test
def reduceByKeyTest(): Unit = {
//1.创建RDD
val rdd1: RDD[String] = sc.parallelize(Seq("hello lily", "hello lucy", "hello tim"))
//2.处理数据
val rdd2: RDD[(String, Int)] = rdd1.flatMap(item => item.split(" "))
.map(item => (item, 1)) //元组的形式
.reduceByKey((curr, agg) => curr + agg) //curr代表第一次执行的value值,agg是局部结果 ,局部结果变成整体结果
//reduceByKey第一步先按照key分组,然后对每一组进行聚合,得到结果
//3.得到结果
val result: Array[(String, Int)] = rdd2.collect()
result.foreach(item => println(item))
//4.关闭sc
sc.stop()
}