一、Rdd行动算子
1、【foreachPartition】可以遍历rdd中每一个分区的数据。多用于对数据进行持久化,比如存储到数据库中;
2、【keyBy】对传入的参数作为key存在,rdd中的原有元素作为value存在,形成一个新元组。可以遍历rdd中的每一个元素;
3、【keys】获取rdd中元组的所有key;
4、【values】获取rdd中元组的所有value;
5、【collectAsMap】将rdd中存储的元组直接转化为Map,重复key会覆盖;
二、实例
package com.cn.rddOperator
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object Action04 {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("Action").setMaster("local[1]")
val sc = new SparkContext(conf)
sc.setLogLevel("WARN")
val rdd1: RDD[Int] = sc.parallelize(List(1,2,3,4,5,6),3)
/**
* foreachPartition 可以遍历rdd中每一个分区的数据
* 多用于对数据进行持久化,比如存储到数据库中
*/
rdd1.foreachPartition(x=>println(x.reduce(_+_)))//3 7 11
/**
* keyBy 对传入的参数作为key存在,rdd中的原有元素作为value存在,形成一个新元组
* keyBy 可以遍历rdd中的每一个元素
*/
val rdd2: RDD[String] = sc.parallelize(List("hive","spark","hadoop","kafka"))
val rdd3: RDD[(Int, String)] = rdd2.keyBy(_.length)
println(rdd3.collect().toBuffer) //ArrayBuffer((4,hive), (5,spark), (6,hadoop), (5,kafka))
/**
* keys 获取rdd中元组的所有key
* values 获取rdd中元组的所有value
*/
val keys: RDD[Int] = rdd3.keys
val values: RDD[String] = rdd3.values
println(keys.collect().toBuffer)//ArrayBuffer(4, 5, 6, 5)
println(values.collect().toBuffer)//ArrayBuffer(hive, spark, hadoop, kafka)
/**
* collectAsMap 将rdd中存储的元组直接转化为Map
* 重复key会覆盖
*/
val map: collection.Map[Int, String] = rdd3.collectAsMap()
println(map)//Map(5 -> kafka, 4 -> hive, 6 -> hadoop)
}
}