1、这里准备一个字符串List作为输入数据源
val lines = List("hello tom hello jerry", "hello jerry", "hello kitty")
2、WordCount
2.1、将每一个字符串按照空格切分
lines.map(_.split(" "))
2.2、将切分后的数组取掉,直接将每一个单词放在外层的List中
lines.map(_.split(" ")).flatten
2.3、前面两个步骤可以合成一个步骤完成(2.1+2.2)
lines.flatMap(_.split(" "))
结果: List[String] = List(hello, tom, hello, jerry, hello, jerry, hello, kitty)
2.4、将每一个单词和“1”组成元组
.map((_, 1))
结果: List[(String, Int)] = List((hello,1), (tom,1), (hello,1), (jerry,1), (hello,1), (jerry,1), (hello,1), (kitty,1))
2.5、分组
.groupBy(_._1)
结果:scala.collection.immutable.Map[String,List[(String, Int)]] = Map(tom -> List((tom,1)), kitty -> List((kitty,1)), jerry -> List((jerry,1), (jerry,1)), hello -> List((hello,1), (hello,1), (hello,1), (hello,1)))
2.6、将Map中的value中的元组的size
方法一:.map(t => (t._1, t._2.size))
方法二:.mapValues(_.foldLeft(0)(_+_._2))
2.7、排序
.toList.sortBy(_._2).reverse
可以用一步完成:
方法一:lines.flatMap(_.split(" ")).map((_, 1)).groupBy(_._1).map(t => (t._1, t._2.size)).toList.sortBy(_._2).reverse
方法二:lines.flatMap(_.split(" ")).map((_, 1)).groupBy(_._1).mapValues(_.foldLeft(0)(_+_._2))
本文详细介绍了如何使用Spark处理字符串列表,通过切分、映射、分组等步骤实现WordCount,最终得到每个单词出现的频率,并按频率降序排序。
337

被折叠的 条评论
为什么被折叠?



