RDD基本算子

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()
  }

}


  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark RDD(弹性分布式数据集)是Spark中最基本的数据抽象,它代表了一个不可变、可分区、可并行计算的数据集合。转换算子是用于对RDD进行转换操作的方法,可以通过转换算子RDD进行各种操作和变换,生成新的RDD。 以下是一些常见的Spark RDD转换算子: 1. map(func):对RDD中的每个元素应用给定的函数,返回一个新的RDD,新RDD中的每个元素都是原RDD中元素经过函数处理后的结果。 2. filter(func):对RDD中的每个元素应用给定的函数,返回一个新的RDD,新RDD中只包含满足条件的元素。 3. flatMap(func):对RDD中的每个元素应用给定的函数,返回一个新的RDD,新RDD中的每个元素都是原RDD中元素经过函数处理后生成的多个结果。 4. union(other):返回一个包含原RDD和另一个RDD中所有元素的新RDD。 5. distinct():返回一个去重后的新RDD,其中不包含重复的元素。 6. groupByKey():对键值对RDD进行分组,返回一个新的键值对RDD,其中每个键联一个由具有相同键的所有值组成的迭代器。 7. reduceByKey(func):对键值对RDD中具有相同键的值进行聚合操作,返回一个新的键值对RDD,其中每个键联一个经过聚合函数处理后的值。 8. sortByKey():对键值对RDD中的键进行排序,返回一个新的键值对RDD,按照键的升序排列。 9. join(other):对两个键值对RDD进行连接操作,返回一个新的键值对RDD,其中包含两个RDD中具有相同键的所有元素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值