spark学习笔记(入门)——sparkcore实现wordcount的三种方式

这篇博客介绍了在Scala中使用Spark进行WordCount的三种不同实现方法。第一种直接通过flatMap和groupByKey操作,第二种引入了reduceByKey,第三种则结合了map和reduceByKey。所有方法都包括读取数据、分词、计数和结果输出的步骤,并在最后关闭SparkContext。
摘要由CSDN通过智能技术生成

作者水平低,如有错误,敬请指正!欢迎讨论指导!

目录

第一种

第二种

 第三种


第一种

def main(args: Array[String]): Unit = {
  //建立spark连接
  val sparkConf = new SparkConf().setMaster("local[*]").setAppName("WordCountTwo")
  val sc = new SparkContext(sparkConf)
  //执行操作
  val lines: RDD[String] = sc.textFile("datas")
  val words: RDD[String] = lines.flatMap(_.split(" "))
  val group: RDD[(String, Iterable[String])] = words.groupBy(word => word)
  val wordcount = group.map {
    case (word, list) => {
      (word, list.size)
    }
  }
  val array: Array[(String,Int)] = wordcount.collect()
  array.foreach(println)
  //关闭
  sc.stop()
}

第二种

def main(args: Array[String]): Unit = {
  val sparkConf = new SparkConf().setMaster("local[*]").setAppName("WordCountThree")
  val sc = new SparkContext(sparkConf)
  val lines: RDD[String] = sc.textFile("datas")
  val words: RDD[String] = lines.flatMap(_.split(" "))
  val wordToOne = words.map(word => (word, 1))
  val group: RDD[(String, Iterable[(String, Int)])] = wordToOne.groupBy(t => t._1)
  val wordcount = group.map {
    case (word, list) => {
      list.reduce(
        (t1, t2) => {
          (t1._1, t1._2 + t2._2)
        }
      )
    }
  }
  val array: Array[(String, Int)] = wordcount.collect()
  array.foreach(println)
  sc.stop()
}

 第三种

def main(args: Array[String]): Unit = {
  //建立spark运行配置对象
  val sparkConf = new SparkConf().setMaster("local[*]").setAppName("WordCount")
  //建立连接对象
  val sc:SparkContext = new SparkContext(sparkConf)
  //读取文件
  val fileRDD: RDD[String] = sc.textFile("datas")
  //分词
  val wordRDD: RDD[String] = fileRDD.flatMap(_.split(" "))
  //数据结构转换
  val word2RDD: RDD[(String, Int)] = wordRDD.map((_,1))
  //分组聚合
  val word2count: RDD[(String, Int)] = word2RDD.reduceByKey(_+_)
  //采集结果到内存
  val wordend: Array[(String, Int)] = word2count.collect()
  //打印
  word2count.foreach(println)
  //关闭spark
  sc.stop()

}
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值