Scala用RDD求学生平均成绩
时间: 2023-11-01 16:07:39 浏览: 102
假设我们有一个学生成绩的RDD,其中每个元素都是`(学生ID, 成绩)`的二元组,可以使用以下代码来求学生平均成绩:
```scala
val scores: RDD[(String, Double)] = ... // (学生ID, 成绩) 的二元组RDD
val avgScores: RDD[(String, Double)] = scores
.groupByKey() // 按学生ID分组
.mapValues(scores => scores.sum / scores.size) // 计算平均成绩
avgScores.foreach(println) // 输出结果
```
首先,使用 `groupByKey()` 按学生ID将成绩分组,然后使用 `mapValues()` 对每个分组计算平均成绩。最终得到一个 `(学生ID, 平均成绩)` 的二元组RDD。
相关问题
利用scala和RDD统计每个汉字出现的次数
以下是一个示例代码,假设我们有一个文本文件"input.txt",里面包含中文文本。
```scala
import org.apache.spark.{SparkConf, SparkContext}
object CharacterCount {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("CharacterCount").setMaster("local[*]")
val sc = new SparkContext(conf)
// 读入文本文件,每行转化为一个字符串
val lines = sc.textFile("input.txt")
// 将每个字符串拆分为单个字符
val characters = lines.flatMap(line => line.split(""))
// 过滤掉非中文字符
val chineseCharacters = characters.filter(isChineseCharacter)
// 将每个中文字符映射为一个键值对,值为1
val pairs = chineseCharacters.map(c => (c, 1))
// 按照键(中文字符)分组,将对应的值相加
val counts = pairs.reduceByKey(_ + _)
// 输出结果
counts.foreach(println)
sc.stop()
}
// 判断一个字符是否为中文字符
def isChineseCharacter(c: String): Boolean = {
val p = "^[\\u4E00-\\u9FA5]+$".r
p.findFirstMatchIn(c).isDefined
}
}
```
首先,我们读入文本文件并将每行转化为一个字符串。然后,我们将每个字符串拆分为单个字符,并过滤掉非中文字符。接下来,我们将每个中文字符映射为一个键值对,值为1。最后,我们按照键(中文字符)分组,将对应的值相加,得到每个中文字符出现的次数。最后,我们输出结果。
在这个示例中,我们使用了Scala编程语言和Spark RDD API来进行中文字符计数。我们首先使用flatMap()函数将每个字符串拆分为单个字符,然后使用filter()函数过滤掉非中文字符。接着,我们使用map()函数将每个中文字符映射为一个键值对。最后,我们使用reduceByKey()函数将相同键的值相加,得到每个中文字符出现的次数。
scala学生信息管理系统计算平均分
假设你已经将学生的信息存储在了一个数组中,每个学生的信息包括姓名、年龄和考试成绩。你可以使用 Scala 的高阶函数 `map` 和 `reduce` 来计算平均分。
首先,使用 `map` 函数将每个学生的成绩提取出来,组成一个新的数组。然后,使用 `reduce` 函数计算这个数组中所有成绩的总和,最后除以学生人数即可得到平均分。
下面是示例代码:
```scala
case class Student(name: String, age: Int, score: Double)
val students = Array(
Student("Alice", 20, 85.0),
Student("Bob", 21, 90.0),
Student("Charlie", 19, 75.0),
Student("David", 22, 80.0)
)
val scores = students.map(_.score)
val totalScore = scores.reduce(_ + _)
val averageScore = totalScore / students.length
println(s"The average score is $averageScore")
```
输出结果为:
```
The average score is 82.5
```