小程序开发定制Scala应用篇二:读取同一文件夹中的所有文件,并统计文件中各单词出现频率(spark)

  1. import java.io.File
  2. import scala.io.Source
  3. import collection.mutable.Map
  4. object WordCount {
  5. def main(args:Array[String]): Unit ={
  6. val dirfile=new File("/home/hadoop/mydata")//小程序开发定制定义一个目标文件夹对象
  7. val files = dirfile.listFiles//小程序开发定制定义一个数组,小程序开发定制文件夹中的每个文件作为数组的元素
  8. val results = Map.empty[String,Int]//定义一个空的映射(k,v),存储统计结果
  9. for(file <-files){//把每一个文件都遍历赋给file
  10. val data =Source.fromFile(file)//建立文件操作对象
  11. val strs = data.getLines().flatMap(s=>s.split(" "))//读取文件文件内容并把文件内容根据空格进行分词,把每个词当做一个元素
  12. strs foreach{word =>
  13. if (results.contains(word))
  14. results(word)+=1 else results(word)=1
  15. }//遍历str,若在result映射中key存在该元素,则在对应的value+1,若不存在则在result映射中插入该元素,并把value=1
  16. }
  17. results foreach{case (k,v) => println(s"$k:$v")}//遍历统计结果输出
  18. }
  19. }

涉及函数:

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文件夹:

 统计结果:

以上是我的一点粗浅见解若有不足之处望海涵!!当然要是能帮忙指出,就更香了。小白在此叩拜!!!!

 

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发