Scala 是一种多范式的编程语言,它结合了面向对象和函数式编程的特点。由Martin Odersky于2001年开始开发,并在2004年正式发布。Scala的设计哲学是在同一个源文件中无缝地融合这两种编程范式,旨在提供一种简洁、高效和可扩展的语言。
“WordCount” 是一个在数据处理和文本分析中非常经典的程序,它的目的是统计文本数据集中每个单词出现的次数。
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object WordCount {
def main(args: Array[String]): Unit = {
// 创建Spark配置对象,设置应用程序名称为"Word Count",并指定运行模式为本地模式,使用所有可用的核心
val conf = new SparkConf().setAppName("Word Count").setMaster("local[*]")
// 创建SparkContext对象,这是与Spark集群交互的入口点
val sc = new SparkContext(conf)
// 从指定的路径读取文本文件,并创建一个RDD对象,每个元素代表输入文件中的一行
val input: RDD[String] = sc.textFile("path/to/your/input.txt")
// 使用flatMap转换操作,将每一行拆分成单词,并返回一个包含所有单词的RDD
// _.split(" ")将每行按空格拆分成单词数组,flatten将其展平为一个单词序列
val words: RDD[String] = input.flatMap(_.split(" "))
// 使用map转换操作,将每个单词映射成一个键值对,键是单词,值是1
// 这将创建一个包含(word, 1)对的RDD
val pairs: RDD[(String, Int)] = words.map(word => (word, 1))
// 使用reduceByKey转换操作,对每个单词出现的次数进行聚合
// (a, b) => a + b是一个聚合函数,它将相同键的值相加
val wordCounts: RDD[(String, Int)] = pairs.reduceByKey(_ + _)
// 使用collect操作,将结果收集到驱动程序端,并打印出来
// collect()方法将RDD中的所有元素收集到一个数组中
// foreach用于遍历数组,并打印每个键值对
wordCounts.collect().foreach(println)
// 停止SparkContext,释放资源
sc.stop()
}
}