Transformation类算子:
filter
过滤符合条件的记录数,true保留,false过滤掉。
map
将一个RDD中的每个数据项,通过map中的函数映射变为一个新的元素。
特点:输入一条,输出一条数据。
flatMap
先map后flat。与map类似,每个输入项可以映射为0到多个输出项。
sample
随机抽样算子,根据传进去的小数按比例进行又放回或者无放回的抽样。
reduceByKey
将相同的Key根据相应的逻辑进行处理。
sortByKey/sortBy
作用在K,V格式的RDD上,对key进行升序或者降序排序。
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object ScalaSpark {
def main(args: Array[String]): Unit = {
val conf = new SparkConf()
conf.setMaster("local")
conf.setAppName("wc")
val con = new SparkContext(conf)
con.setLogLevel("error")//不显示log(可选的有:ALL,DEBUG,ERROR,FATAL,TRACE,WARN,INFO,OFF)
val lines = con.textFile("./data/words")
//0.1-》随机抽样比例为0.1 (抽取的数据量是在10%左右) //指定seed,执行结果不变
val result: RDD[String] = lines.sample(true,0.1,10L)
result.foreach(println)
// val words = lines.flatMap(line => {line.split(" ")})
// val pairWords = words.map(one => {(one,1)})
// val reduceResult: RDD[(String, Int)] = pairWords.reduceByKey((v1: Int, v2: Int) => {v1 + v2})
//排序(默认升序,加false降序)
//reduceResult.sortBy(tp =>{tp._2},false).foreach(println)
//通过sortByKey()排序
//拿到二元组,进行翻转,排序后再翻转就好了
// val value: RDD[(Int, String)] = reduceResult.map(tp =>{tp.swap})
// val result: RDD[(Int, String)] = value.sortByKey(false)//默认升序
// val lastValue = result.map(tp =>{tp.swap})
// lastValue.foreach(println)
/**
* filter
* 过滤符合条件的记录数,true保留,false过滤掉。
*/
// val rdd1 = lines.flatMap(_.split(" "))
// rdd1.filter("hello".equals(_)).foreach(println)
/**
* flatMap
* 先map后flat。与map类似,每个输入项可以映射为0到多个输出项。
* faltmap 一对多
*/
//lines.flatMap(_.split(" ")).foreach(println)
/**
* map
* 将一个RDD中的每个数据项,通过map中的函数映射变为一个新的元素。
* 特点:输入一条,输出一条数据。
*/
//lines.map(line =>{
// line+"#"
// }).foreach(println(_))
}
}