使用Spark计算WordCount

使用Spark统计单词计数,即Word Count的思路如下:

  1. 首先按行拆分单词,每个单词的初始计数为1
  2. 然后对相同的单词进行合并,并计数累加
  3. 对结果格式化输出

主要使用map,flatmap,reduceByKey算子进行计算统计,代码如下:

scala 复制代码
object WordCount {
    // 单词分隔符
    val delimiter = ","

    def main(args: Array[String]): Unit = {
        // 据说Spark-3.x可使用SPARK_USER环境变量指定用户名
        System.setProperty("user.name", "hdfs")

        // yarn-cluster模式时,只能通过spark-submit.sh方式提交
        val sparkConf = new SparkConf().setAppName("xuxm-test").setMaster("yarn-cluster")
        val sc = SparkContext.getOrCreate(sparkConf)

        // 计算WordCount,可用spark.sparkContext代替sc
        val file = sc.textFile("/Users/Xxx/input/wc_in.txt")
        val words = file.flatMap(line => line.split(delimiter))
        val pairs = words.map(word => (word, 1))
        // 自动按pairs中每个元祖的第一个元素作为key,第二个元素作为value,a和b参数分别表示要合并的相同key的2个元祖的value
        val counts = pairs.reduceByKey((a, b) => a + b)
        val wc = counts.map(p => p._1 + ":" + p._2)
        // 以上计算过程也可简化为如下形式
        // val wc = file.flatMap(_.split(delimiter)).map((_, 1)).reduceByKey(_ + _).map(p => p._1 + ":" + p._2)
        wc.collect().foreach(println) // collect结果是一个Array,也可直接foreach打印
        // 也可结果保存到文件中
        // wc.saveAsTextFile("/Users/Xxx/output/wc_out")
        sc.stop()
    }
}
相关推荐
阿里云大数据AI技术6 小时前
迅雷基于阿里云 EMR Serverless Spark 实现数仓资源效率与业务提升
spark
伟大的大威12 小时前
在 NVIDIA DGX Spark部署 Stable Diffusion 3.5 并使用ComfyUI
stable diffusion·spark·comfyui
叫我:松哥13 小时前
基于Spark智能推荐算法的农业作物推荐系统,推荐算法使用Spark ML风格推荐引擎
大数据·python·机器学习·spark-ml·spark·flask·推荐算法
是阿威啊14 小时前
【用户行为归因分析项目】- 【企业级项目开发第五站】数据采集并加载到hive表
大数据·数据仓库·hive·hadoop·spark·scala
云器科技1 天前
告别Spark?大数据架构的十字路口与技术抉择
大数据·架构·spark·lakehouse·数据湖仓
云器科技2 天前
云器Lakehouse2025年03月版本发布:打造更强大、更智能、更安全的数据管理新体验
大数据·数据库·架构·spark·lakehouse
峥无2 天前
《C++ STL 关联式容器完全指南:深度解析 map 与 set 的使用》
开发语言·c++·set·map
予枫的编程笔记2 天前
【2026.1.5】学习笔记之Java 集合-1
java·开发语言·笔记·学习·list·map·java集合
会编程的李较瘦3 天前
【期末考试总结】spark课程知识点
大数据·单例模式·spark
linweidong4 天前
Spark Shuffle的优化
大数据·分布式·spark