1.转换算子之map和distinct算子
题目
编程要求
根据提示,在右侧编辑器begin-end处补充代码,输出每个元素及其长度并去重。
测试说明
平台会对你编写的代码进行测试:
预期输出:
(an,2)
(dog,3)
(cat,3)
代码
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object EduCoder1 {
def main(args: Array[String]): Unit = {
val conf =new SparkConf().setAppName("educoder1").setMaster("local")
val sc=new SparkContext(conf)
val rdd = sc.parallelize(List("dog","an","cat","an","cat"))
/********** Begin **********/
//第一步:通过获取rdd中每个元素的长度创建新的rdd1
var rdd1=rdd.map(x=>x.length())
//第二步:通过zip把rdd1和rdd组合创建rdd2
var rdd2=rdd.zip(rdd1)
//第三步:去重
var rdd3=rdd2.distinct()
//第四步:输出结果
rdd3.foreach(println)
/********** End **********/
sc.stop()
}
}
2.转换算子之flatMap和filter算子
题目
编程要求
根据提示,在右侧编辑器begin-end处补充代码,输出个数大于一的单词。
测试说明
平台会对你编写的代码进行测试:
所给文件内容如下:
hello,world,hello,spark
good,nice,good,do
预期输出:
(hello,2)
(good,2)
代码
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object EduCoder2 {
def main(args: Array[String]): Unit = {
val conf =new SparkConf().setAppName("educoder2").setMaster("local")
val sc=new SparkContext(conf)
val rdd=sc.textFile("file:///root/step3_fils")
/********** Begin **********/
//第一步:对所给数据创建的rdd切割分词
var rdd1=rdd.flatMap(x=>x.split(",")).
map(word=>(word,1)).
reduceByKey(_+_).filter(x=>x._2>1).
foreach(println)
//第二步:每个单词计数为1
//第三步:对相同单词个数进行累加
//第四步:过滤出单词个数大于一个的
//第五步:输出结果
/********** End **********/
sc.stop()
}
}
3.转换算子之reduceBykey和mapValues算子
题目
编程要求
根据提示,在右侧编辑器begin-end处补充代码,某商店上午卖出10本 spark 书籍,每本50元,4本 Hadoop 书籍,每本40元,下午卖出20本 spark 书籍,每本40元,10本 Hadoop 书籍,每本30元。
现要求求出这两本书这一天销售的平均价格。
数据如下:
spark,10,50
spark,40,25
hadoop,5,40
hadoop,10,25
测试说明
平台会对你编写的代码进行测试:
预期输出:
(spark,30)
(hadoop,30)
代码
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object EduCoder3 {
def main(args: Array[String]): Unit = {
val conf =new SparkConf().setAppName("educoder3").setMaster("local")
val sc=new SparkContext(conf)
/********** Begin **********/
//第一步:通过给定数据通过集合并行化创建rdd
val list = List(("spark",(10,50)),("hadoop",(5,40)),("hadoop",(10,25)),("spark",(40,25)))
val rdd = sc.makeRDD(list)
//第二步:求出不同书籍一天收入总和以及出售本数
val rdd1=rdd.reduceByKey((a,b)=>(a._1*a._2+b._1*b._2,a._1+b._1)).map(x=>(x._1,x._2._1/x._2._2)).foreach(println)
//第三步:求出每本平均售价
//输出结果
/********** End **********/
sc.stop
}
}
4.转化算子之groupByKey和sortByKey
题目
编程要求
根据提示,在右侧编辑器begin-end处补充代码,对每人所学书籍本数分组并排序输出。
测试说明
平台会对你编写的代码进行测试:
所给数据说明:(“Bob”,“spark”)
Bob:人名
spark:所学书籍
预期输出:
(Bob,3)
(Candy,1)
(Lily,1)
代码
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object EduCoder4 {
def main(args: Array[String]): Unit = {
val conf =new SparkConf().setAppName("educoder4").setMaster("local")
val sc=new SparkContext(conf)
val rdd = sc.parallelize(List(("Bob","spark"),("Lily","hadoop"),("Candy","hive"),("Bob","hbase"),("Bob","hive")))
/********** Begin **********/
//第一步:根据姓名对所学书籍分组
val rdd1=rdd.groupByKey()
//第二步:求出每个人的书籍本数
val rdd2=rdd.map(x=>(x._1,1)).reduceByKey(_+_).sortByKey().foreach(println)
//第三步:根据项目排序
//第四步:输出结果
/********** End **********/
sc.stop()
}
}
5.常见行动算子
题目
编程要求
根据提示,在右侧编辑器begin-end处补充代码输出正确答案。
测试说明
预期输出:
4
dog
sun
an
dogsunancat
dog
sun
an
cat
代码
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object EduCoder5 {
def main(args: Array[String]): Unit = {
val conf =new SparkConf().setAppName("educoder5").setMaster("local")
val sc=new SparkContext(conf)
val rdd = sc.parallelize(List("dog","sun","an","cat"))
/********** Begin **********/
//第一步:返回所给rdd的元素个数并输出
println(rdd.count())
//第二步:返回rdd的前三个元素并输出
rdd.take(3).foreach(println)
//第三步:累加rdd的所有元素并输出结果
println(rdd.reduce(_+_))
//第四步:收集所有元素并且输出
rdd.collect().foreach(println)
/********** End **********/
sc.stop()
}
}