创建键值对RDD

键值对RDD的创建

  • 第一种创建方式:从文件中加载(map函数实现)
scala>  val lines = sc.textFile("file:///usr/local/spark/mycode/pairrdd/word.txt")
lines: org.apache.spark.rdd.RDD[String] = file:///usr/local/spark/mycode/pairrdd/word.txt MapPartitionsRDD[1] at textFile at <console>:27
scala> val pairRDD = lines.flatMap(line => line.split(" ")).map(word => (word,1))
pairRDD: org.apache.spark.rdd.RDD[(String, Int)] = MapPartitionsRDD[3] at map at <console>:29
scala> pairRDD.foreach(println)
(i,1)
(love,1)
(hadoop,1)
(i,1)
(love,1)
(Spark,1)
(Spark,1)
(is,1)
(fast,1)
(than,1)
(hadoop,1)

  • 第二种创建方式:通过并行集合(数组)创建RDD
scala> val list = List("Hadoop","Spark","Hive","Spark")
list: List[String] = List(Hadoop, Spark, Hive, Spark)
 
scala> val rdd = sc.parallelize(list)
rdd: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[11] at parallelize at <console>:29
 
scala> val pairRDD = rdd.map(word => (word,1))
pairRDD: org.apache.spark.rdd.RDD[(String, Int)] = MapPartitionsRDD[12] at map at <console>:31
 
scala> pairRDD.foreach(println)
(Hadoop,1)
(Spark,1)
(Hive,1)
(Spark,1)

创建的键值对转换操作

常见的键值对转换操作包括reduceBykey(),groupByKey(),sortByKey(),join(),cogroup()等,

reduceByKey(func)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是实现该功能的Scala代码: ```scala import org.apache.spark.{SparkConf, SparkContext} object StudentScore { def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName("StudentScore").setMaster("local") val sc = new SparkContext(conf) val data = List(("Math", 85), ("Science", 92), ("Math", 78), ("English", 88), ("Science", 95), ("Math", 90), ("English", 95), ("Science", 80)) // 创建键值对 RDD 列表 val scores = sc.parallelize(data) // 统计每个学科的平均分和最高分 val avgScores = scores.groupByKey().mapValues(values => { val maxScore = values.max val avgScore = values.sum.toDouble / values.size * 100 (maxScore, (avgScore.round / 100.0)) }) // 输出每个学科的平均分和最高分 avgScores.foreach(score => { val subject = score._1 val maxScore = score._2._1 val avgScore = score._2._2 val totalScore = score._2._2 * 100 println(s"$subject\t$maxScore\t$avgScore\t$totalScore") }) sc.stop() } } ``` 该程序首先将指定内容的数据转换成一个键值对 RDD 列表,然后对每个键(即学科)进行分组,统计出每个学科的平均分和最高分,最后输出结果。注意,输出中使用制表符 `\t` 作为字段之间的间隔符,平均分保留两位小数(四舍五入)。 如果想要运行该程序,只需要将以上代码保存到一个名为 `StudentScore.scala` 的文件中,然后使用 Spark 编译器进行编译和运行即可: ``` $ spark-submit --class StudentScore StudentScore.jar ``` 执行成功后,会在控制台输出每个学科的统计结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值