object Test09 extends App {
val lines = List("hello lisi","hello zhangsan lili","zhengsan","zhangsan lisi")
println("lines = "+ lines)
val lines_1 = lines.map(_.split(" "))
println(lines_1)
//List([Ljava.lang.String;@880ec60, [Ljava.lang.String;@3f3afe78, [Ljava.lang.String;@7f63425a, [Ljava.lang.String;@36d64342)
lines_1.foreach(x=>x.foreach(x=>print(x+"\t"))+"\n")
println()
//._split(" ") 把list数组中的每一个元素 ,按照空格分开了每个元素,放在了 另一个小的list集合中 ,所以大的list 集合里面的四个元素,就变成了四个小的list 集合。要用两个foreach才可以访问到里面的元素
//扁平化
val lines_2 = lines_1.flatten
println(lines_2)
//List(hello, lisi, hello, zhangsan, lili, zhengsan, zhangsan, lisi)
// 把 嵌套的list 集合 ,变成一个list 集合
//==================================================
//把上面两步 的map 和 flatten 合并成一步
val words = lines.flatMap(_.split(" "))
//变成key value 对应的形式 key为x value为 1
val wordsToOne = words.map(x=>(x,1))
println(wordsToOne)
//List((hello,1), (lisi,1), (hello,1), (zhangsan,1), (lili,1), (zhengsan,1), (zhangsan,1), (lisi,1))
//================================================
//以上步骤还可写为
val word_to_one = words.map((_,1))
// 下面需要把相同的合并
val group = word_to_one.groupBy(_._1) //根据list集合中的第一个元组,里的第一个元素分组 即key 分组
println(group)
//Map(lisi -> List((lisi,1), (lisi,1)), zhengsan -> List((zhengsan,1)), hello -> List((hello,1), (hello,1)), zhangsan -> List((zhangsan,1), (zhangsan,1)), lili -> List((lili,1)))
//变成了key value 的形式 。 把key相同的放在了一起
//用size 统计一下个数
val group_1 = group.map(x=>(x._1,x._2.size)) // (x._1,x._2.size) x._1这里代表取 元组 的第一个元素 即key ,x._2.size 这里代表取元组的第二个元素的个数。
//刚开始会想这么写group.map(_.1 , _.2.size) 但是报错,因为这里有两个 _ 编译识别不了
println(group_1)
// Map(lisi -> 2, zhengsan -> 1, hello -> 2, zhangsan -> 2, lili -> 1)
//将map 转换成list数组
val result = group_1.toList
println(result)
//List((lisi,2), (zhengsan,1), (hello,2), (zhangsan,2), (lili,1))
//排序
val result_1 = result.sortBy(_._2).reverse
println(result_1)
// List((lisi,2), (zhengsan,1), (hello,2), (zhangsan,2), (lili,1))
//拆分
val finalResult = result_1.map(x=>(x._1+ "\t" + x._2))
println(finalResult)
// List(zhangsan 2, hello 2, lisi 2, lili 1, zhengsan 1)
// 遍历
finalResult.foreach(println)
/* zhangsan 2
hello 2
lisi 2
lili 1
zhengsan 1*/
}
WordCount
最新推荐文章于 2024-10-24 11:16:20 发布