scala学习笔记(1)---我所感觉的scala

scala可能是那种让你写着写着就会去思考问题本质的语言,也因此越学越难,越学越觉得不会,所以如果只是写写spark或是搞搞mapreduce那完全可以和python那样用,刚开始接触还是不要去想太多吧。

scala中的wordcount(分割-》聚合-》统计)

  "hello scala hello spark hello kafka"
    .split(" ") ->分割
    .groupBy(s=>s) ->聚合
    .mapValues(_.length) -> 统计

res30: scala.collection.immutable.Map[String,Int] = Map(spark -> 1, scala -> 1, kafka -> 1, hello -> 3)

  • 统计包含s的单词个数
 "hello scala hello spark hello kafka"
    .split(" ")
    .groupBy(_.contains("s"))
    .mapValues(_.length)

res31: scala.collection.immutable.Map[Boolean,Int] = Map(false -> 4, true -> 2)

  • 统计spark开头的单词数
  "hello scala hello spark hello kafka"
    .split(" ")
    .groupBy(_.startsWith("spark"))
    .mapValues(_.length)

res32: scala.collection.immutable.Map[Boolean,Int] = Map(false -> 5, true -> 1)

  • 遍历一次的wordcount
  "hello scala hello spark hello kafka".split(" ")
    .foldLeft(Map.empty[String,Int]){
    (m,s) => if(m.contains(s)) m.updated(s,m.getOrElse(s,0) + 1) else m.updated(s,1)
  }

res33: scala.collection.immutable.Map[String,Int] = Map(hello -> 3, scala -> 1, spark -> 1, kafka -> 1)

所以所谓wordcount,从数据类型上来讲,无非是String-》Map[String,Int]的转换,而思想上来讲就是分割-》聚合-》统计的过程,代码顺着思想写下去就行,所以scala写起来很顺畅,同时很简洁,比之python也不遑多让,另外这边的聚合是一个String=》map中的Key的演变过程,所以这边是可控的,也因此除了统计单词本身,我做一些上面的变形也非常简单,所以只要对问题本质理解,用scala会非常的简单,但也同时每个人的思想不同,写出来的scala代码也是各不相同的,这也是比较头疼的地方。

所以我感觉scala是一个充满思想的语言,懒得动脑筋还真的学不下去

你可能感兴趣的:(scala学习笔记(1)---我所感觉的scala)