这是编写spark程序的一些常用的基本函数
接下来我将会通过编写代码来使用这些函数
package com.zlf.spark
import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
/**
* spark 基本函数操作实例
*/
object FunctionTest {
def main(args: Array[String]): Unit = {
val conf=new SparkConf().setAppName("FunctionTest").setMaster("local");
val sc=new SparkContext(conf);
var rdd =sc.parallelize(List(1,2,3,4,5,6));
println("map函数测试=================");
val mapRdd=rdd.map { x => x*2 };// 或者写成 rdd.map(_*2)
mapRdd.collect().foreach(println);//控制台输出
println("filter函数测试=================");
val filterRdd=mapRdd.filter(_>5);
filterRdd.collect().foreach(println);
println("count cache函数测试=================");
var textrdd=sc.textFile("src/count.txt");
var count=textrdd.count();
println(count);
textrdd.cache();
count= textrdd.count();
println(count);
println("wordcount函数测试=================");
//把每一行进行根据空格分割,然后flatMap会把多个list合并成一个list,最后把每个元素变成一个元组
//然后把具有相同key的元素的value进行相加操作,参考上面图片中的函数定义,针对reduceByKey,
//传入的函数是对value进行操作的
val wordcount=textrdd.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_)
wordcount.collect().foreach(println);
//其实完成了一个sort by value的过程, sortByKey(false),表示倒序排列
val wordcount2 =textrdd.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).map(x=>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1))
// val wordcount2 =textrdd.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).map(x => (x._2, x._1)).sortByKey(false).map(x => (x._2, x._1))
wordcount2.collect().foreach(println);
println("union函数测试=================");
val rdd1=sc.parallelize(List(('a',1),('a',2),('b',4)))
val rdd2=sc.parallelize(List(('b',1),('b',2),('a',4)))
val result_union=rdd1 union rdd2;
//结果是把两个list合并成一个,List(('a',1),(‘a’, 2),('b',4),(‘b’, 1),('b',2),('a',4))
result_union.collect().foreach(println);
println("join函数测试=================");
val result_join=rdd1 join rdd2;
//结果是把两个list做笛卡尔积,Array((a,(1,4)),(a,(2,4)),(b,(4,1)),(b,(4,2)))
result_join.collect().foreach(println);
val rdd_add=rdd.reduce(_+_);
println(rdd_add);
val rdd_seq=result_union.lookup('a');
println(rdd_seq);//返回 WrappedArray(1, 2, 4)
}
}