import org.apache.spark.SparkContext import org.apache.spark.SparkConf object Teachers { def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName("Teachers").setMaster("local") val sc = new SparkContext(conf) val dataFile = "file:///root/step2_files" /********** begin **********/ //第一步:以外部文件方式创建RDD //第二步:将文件中每行的数据切分,得到自己想要的返回值 //第三步:将相同的key进行聚合 //第四步:按出现次数进行降序 //第五步:输出 /********** end **********/ sc.stop() } } 预期输出:(laozhao,15) (laoyang,9) (laoduan,5) (xiaoxu,4) (laoli,3) (laozhang,2) (laoliu,1)
时间: 2025-05-12 14:38:47 浏览: 20
### Spark RDD 文本文件处理与统计教师名字出现次数
以下是基于 Spark RDD 的代码实现,用于从文本文件中读取数据并统计每个教师名字的出现次数:
```scala
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object TeacherNameCount {
def main(args: Array[String]): Unit = {
// 配置 Spark 环境
val conf = new SparkConf().setAppName("TeacherNameCount").setMaster("local[*]")
val sc = new SparkContext(conf)
try {
// 假设输入文件路径为 "input/teachers.txt"
val inputPath = "input/teachers.txt"
// 使用 textFile 方法加载文件内容到 RDD 中
val lines: RDD[String] = sc.textFile(inputPath)[^1]
// 对每一行进行分割,并提取教师的名字
val teacherNames: RDD[String] = lines.flatMap(line => line.split("\\s+"))[^3]
// 过滤掉非教师名字的数据(假设已知教师名字列表)
val filteredNames: RDD[String] = teacherNames.filter(name => name.matches("[A-Z][a-z]+"))
// 将教师名字映射成 (name, 1) 键值对形式
val namePairs: RDD[(String, Int)] = filteredNames.map(name => (name, 1))[^4]
// 统计每个教师名字出现的次数
val counts: RDD[(String, Int)] = namePairs.reduceByKey(_ + _)
// 输出结果
counts.collect.foreach { case (teacher, count) =>
println(s"Teacher Name: $teacher, Count: $count")
}
} finally {
// 关闭 Spark Context
sc.stop()
}
}
}
```
#### 说明
上述代码实现了以下功能:
1. **配置 Spark 环境**:通过 `SparkConf` 和 `SparkContext` 初始化 Spark 应用环境。
2. **加载文件**:使用 `sc.textFile()` 加载指定路径下的文本文件至 RDD。
3. **数据预处理**:利用 `flatMap` 方法按空格拆分每行字符串,并提取可能的教师名字。
4. **过滤无关数据**:通过正则表达式筛选符合条件的教师名字。
5. **键值对转换**:将教师名字转化为 `(name, 1)` 形式的键值对[^4]。
6. **聚合统计**:调用 `reduceByKey` 方法汇总每个教师名字的出现次数。
此代码适用于本地测试或部署到 Spark Standalone 集群环境中运行。如果需要提交到集群,请确保 HDFS 和 Spark 已经正常启动[^2]。
---
###
阅读全文
相关推荐














