Spark(22)-Scala编程实例-WordCount详解

程序的功能

针对某目录下的的所有文件的单词进行汇总,并进行词频统计。

简单解释一下程序:

1、首先引入java.io.File对象,因为要遍历某个目录下的整个文件...引入两个包

2、单例对象,不需要声明类,入口函数不返回任何值 ,函数体。

声明file对象,帮忙获取当前目录下的文件,

files,获取多个文件,打印名称(不写也行),再将files转换为listFiles文件列表,列表中每一个元素都是一个文件,方便后续的遍历

wordsMap,进行单词的词频统计,例如 hadoop : 5,单词数量是可变映射,

如何声明可变映射呢?我们没导入包,直接把类全称写进来了,加了scala.collection.mutable.Map[String,Int](),映射中包含两个类型,因为映射的key是单词为String类型,而单词出现的频次为Int类型。

listFiles.foreach( ),然后依次对文件遍历,把他里面的文件拿出来,拿到文件后,对文件中一行行的单词读出来。

.foreach需要遍历每一个文件。对这个文件file做操作需要一个函数,遍历得到的每一个值都要赋值个file,


它的整个函数体如下红框:
=> 右边做的是对文件file做的操作,即把file一行行读出来形成一个集合,对文件集合再调用foreach方法, .foreach(line => line.split(" ")拆分成单词,再把单词按照词频统计放到映射里,如果存在就加一......  .foreach(line => line.split(" ") .....)集合中每一个值都赋值给我们的line,然后lambda表达式中 => 右边就是对line的具体操作--对line按空格进行拆分,这样每一行都会出现许多个单词,多个单词会构成另一个集合。

对多个单词组成的集合,我们再调用.foreach(word => {if (wordsMap.contains(word)){ wordsMap(word) += 1} else{ wordsMap += (word -> 1)}})

对取到的每一个word,例如取到一个hadoop,如果这里面包含hadoop,那么他的键值对的值加一,如果不包含,就新建一个键值对。

下面的

代码实现定制的打印 

以上就是Scala的函数式编程。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值