RDD的转换与操作

spark编程2 - 图1

  1. //将RDD中的每个数据项通过map中自定义函数转换成一个新的RDD
  2. val data=sc.parallelize(List(1,2,3,4))
  3. 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(" "))

image.png

4.sortBy(f,ascending,numPartitions)

image.png

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)

image.png
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))
将第一个值提取出来 将第二个值除以二

将汇总后的成绩存储为文本文件