RDD的转换与操作
//将RDD中的每个数据项通过map中自定义函数转换成一个新的RDD
val data=sc.parallelize(List(1,2,3,4))
val square=data.map(x=>x*x)
2.collect:将RDD的所有元素转化为数组并返回到Driver端
3.flatmap:对集合中的每个元素进行map操作再扁平化
val data=sc.parallilise();
val dfmap=data.flatMap(x=>s.split(" "))
4.sortBy(f,ascending,numPartitions)
val data=sc.parallelize(List(("john",78),("john",80),("john",60))
val sort_data=data.sortBy(x=>x._2,false,1) //将第二个字段进行降序,分区个数为1
val data=sc.parallelise()
val sort_data=data.sortBy(x=>x._2,false,1)
5.take() 获取前N个元素
sort_data.take(5)
实战:查询学生成绩表的前5名
每个数据被分成三列,成绩转化为Int型
1.创建RDD
val bigdata=sc.textFile("")
val mathdata=sc.textFile("")
2.数据转换:将数据拆分成3列
val m_bigdata=bigdata.map(x=> val line=x.split("\t");(line(0),line(1),line(2).toInt))
val m_mathdata=mathdata.map(x=> val line=x.split("\t");(line(0),line(1),line(2).toInt))
3.按成绩排序
val sort_bigdata=m_bigdata.sortBy(x=>x._3,false,1);
4.取前五个
sort_bigdata.take(5)
输出单科成绩为100分的同学ID—对两个RDD进行合并
union():合并RDD--两个RDD元素类型一致
distinct:去重
filter():对每个元素应用函数 保留返回值为true的函数
val f_bigdata=m_bigdata.filter(x=>x._3==100)
val f_mathdata=m_mathdata.filter(x=>x._3==100)
2.提取出id
val bigdata_id=f_bigdata.map(x=>x._1)
val mathdata_id=f_mathdata.map(x=>x._1)
3.合并
val id=bigdata_id.union(mathdata_id)
4.去重
val uid=id.distinct
5.查询
uid.collect
输出每位学生所有科目的总成绩;
合并成绩表
val score=m_bigdata.union(m_math);
2.以学生id为健 ,将成绩转化成RDD
val kv_score=score.map(x._1->x._3)
3.合并具有相同键的值
val total=kv_score.reduceByKey((a,b)=>a+b)
4.查询
total.select
输出每位学生的平均成绩
val averge=kv_score.reduceByKey((a,b)=>a+b).map(x=>(x._1,x._2/2.0))
将第一个值提取出来 将第二个值除以二
将汇总后的成绩存储为文本文件