- import java.io.File
- import scala.io.Source
- import collection.mutable.Map
- object WordCount {
- def main(args:Array[String]): Unit ={
- val dirfile=new File("/home/hadoop/mydata")//小程序开发定制定义一个目标文件夹对象
- val files = dirfile.listFiles//小程序开发定制定义一个数组,小程序开发定制文件夹中的每个文件作为数组的元素
- val results = Map.empty[String,Int]//定义一个空的映射(k,v),存储统计结果
- for(file <-files){//把每一个文件都遍历赋给file
- val data =Source.fromFile(file)//建立文件操作对象
- val strs = data.getLines().flatMap(s=>s.split(" "))//读取文件文件内容并把文件内容根据空格进行分词,把每个词当做一个元素
- strs foreach{word =>
- if (results.contains(word))
- results(word)+=1 else results(word)=1
- }//遍历str,若在result映射中key存在该元素,则在对应的value+1,若不存在则在result映射中插入该元素,并把value=1
- }
- results foreach{case (k,v) => println(s"$k:$v")}//遍历统计结果输出
- }
-
- }
涉及函数:
File:
public File(String pathname)
: 直接通过文件路径字符串创建public File(String parent, String child)
: 通过父和子路径字符串创建public File(File parent, String child)
: 先创建父级 file 对象,再结合子路径创建
listFiles:此方法用于以文件路径形式返回的文件数组形式返回所有文件的名称。
Map.empty[String,Int]:Map定义一个映射,empty代表一个无子元素的元素,两个和用则是定义了一个空的映射。
Source.fromFile:创建一个BufferedSource对象,本次代码中的对象指文件。
getlines:读取文件完整内容(getline:读取文件中的一行内容)
flatMap:把内容分解成多个集合,最后再把多个集合拍扁成一个集合。
contains:对集合遍历,判断元素是否存在于集合中,最终返回Boolean。
foreach:对集合遍历操作。
mydata文件夹:
统计结果:
以上是我的一点粗浅见解若有不足之处望海涵!!当然要是能帮忙指出,就更香了。小白在此叩拜!!!!