欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Scala版本的WordCount

程序员文章站 2022-05-25 15:04:56
...
在处理搜索的同义词数据时遇到一个问题,本来是由数据人员人工整理好的数据,发我直接使用,后来发现发我的数据里面总是存在点问题,也难怪了
2000行x5列条左右的数据,让人工去比对,若不是细心的人还真是容易出现问题,这已经是第三次整理的结果了,结果还是有问题,就自己写个程序,找出有问题的数据,然后再处理下,有问题的数据也就几十条。


搜索使用的同义词一般是如下格式的:

腾讯,QQ
奇虎,360,北京奇虎科技有限公司
中国,祖国,china
北京银行,北京银行股份有限公司
北京大学,北大
清华大学,清华

现在的要写个wordcount,统计出出现词频大于1的那个词语,可能会根据词频排个序啥的,需求很简单,用Java实现也不难,就是代码量可能有点大,所以就顺手用scala写一个,一方面以后要使用Spark来处理一些东西,另一方面正好补补scala基础,直接上代码,核心代码非常简洁只有10行:
package file

import scala.io.Source

/**
 * Created by qindongliang on 2015/7/20.
 * Scala版本的wordcount
 */
object WordCount {
  def main(args: Array[String]) {
      wordcount()//调用wordcount
  }

  /** **
    * scala版的wordcount,支持任意以指定分隔符分割的内容
    */
  def wordcount(): Unit ={
   //原始map
   val map=Source.fromFile("D:\\tmp\\csv\\sydata.txt")
     .getLines()
     .flatMap(_.split(","))
     .foldLeft(Map.empty[String, Int]){
      (count, word) => count + (word -> (count.getOrElse(word, 0) + 1))
    }
    val sortmap = map
      .toList //转成List排序
      .filter(_._2 > 1)//过滤出数量大于指定数目的数据,这里是1
      .sortWith(_._2 > _._2); //根据value值进行降序排序,( 降序(_._2 > _._2)升序(_._2 < _._2) )
    for(pair<-sortmap) println(pair) //遍历Map,输出每一个kv对
  }




}


处理的结果如下:
(,4398)
(中外运,3)
(中国外运,3)
(江苏舜天,3)
(邯郸钢铁,3)
(浪潮电子信息产业股份有限公司,2)
(浙江省医药保健品,2)
(移动通信,2)
(南钢,2)
(美克国际,2)
(邯钢,2)
(内蒙古远兴天然碱股份有限公司,2)
(莱钢,2)
(北京中创信测科技股份有限公司,2)
(辽河油田,2)
(重庆路桥,2)
(广州国光,2)
(上海锦江国际旅游股份有限公司,2)
(包头铝业,2)
(天一科技,2)
(特发信息,2)
(中纺,2)
(中国国际航空,2)
(白云山制药,2)
(马龙产业,2)
(三九宜工生化股份有限公司,2)
(铜都铜业,2)
(天然碱,2)
(武汉钢铁,2)
(天赐新大国际贸易,2)
(中国金茂(集团)股份有限公司,2)
(南宁百货大楼股份有限公司,2)
(中国国电,2)
(TCL,2)
(南华兰陵电气,2)
(中国石油,2)
(首钢,2)
(蓝星石化,2)
(三联商社股份有限公司,2)
(江西铜业,2)
(华北制药股份有限公司,2)
(SINOPEC,2)
(徐州工程机械,2)
(鞍钢,2)
(厦门金龙,2)
(澳柯玛,2)
(三一重工股份有限公司,2)
(丽珠医药集团股份有限公司,2)
(哈飞股份,2)
(京东方,2)
(曙光汽车,2)
(三星石化,2)
(大族激光,2)
(京东方科技集团股份有限公司,2)
(东北制药,2)
(上海宏盛科技发展股份有限公司,2)
(振华,2)
(深圳市大族激光科技股份有限公司,2)
(S蓝石化,2)
(唐山钢铁,2)
(申通地铁,2)
(蓝星石化科技股份有限公司,2)
(天津水泥,2)
(东方科学仪器,2)
(山东新华医疗器械股份有限公司,2)
(深圳市特发信息股份有限公司,2)
(太原钢铁,2)
(天颐科技,2)
(济南轻骑,2)
(实达电脑,2)
(中国石化,2)
(江铃汽车,2)
(中国铝业,2)
(SINOTRANS,2)
(广西阳光股份有限公司,2)
(傲冠电脑,2)
(厦门船舶重工股份有限公司,2)
(中国重型汽车,2)
(华能国际电力股份有限公司,2)
(中国旅行社,2)
(中视传媒股份有限公司,2)
(重庆钢铁,2)
(京能热电,2)
(重庆路桥股份有限公司,2)
(华源集团,2)
(莱芜钢铁,2)
(中软,2)
(中国水产,2)

至此,完成整个过程,代码有点混乱,但是功能还是非常强大的!


最后欢迎大家扫码关注微信公众号:我是攻城师(woshigcs),我们一起学习,进步和交流!(woshigcs)
本公众号的内容是有关搜索和大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访!

Scala版本的WordCount
            
    
    博客分类: Scala scalajavawordcount