问题导读 1.你认为map函数可以做哪些事情? 2.hadoop中map函数与Scala中函数功能是否一致? 3.Scala中reduce函数与hadoop中reduce函数功能是否一致? spark用的Scala编写的。因此这里的map和reduce,也就是Scala的map和reduce。scala 有很多函数,而且很方便。这里想写下map和reduce函数,也是看到一篇帖子,感觉Scala非常有意思。 map函数 map函数,你可以往里面放一些,在其它语言中的匿名函数。 源数据:(“人名”,年龄) val rdd = sc.parallelize(Array[(String,Int)](("Michael",29),("Andy",30),("Justin",19), ("Tom",10), ("Tonny",11), ("Bob",12))) 比如val result = rdd.map(x => x._2) 上面是什么意思?x是rdd中的元素,代表的是任何一个(String,Int),比如("Michael",29)或则("Andy",30)等。x._2则是第二个元素。 与hadoop中map函数比较 hadoop的map函数,与Scala中map函数没有太大的关系。hadoop的map函数,主要用来分割数据。至于如何分割可以指定分隔符。 reduce函数 Scala中,reduce是传递两个元素,到函数中,然后返回值与下一个元素,一起作为参数传入。Scala有意思的地方在这里,难懂的地方也在这里。 如下面语句 val result = rdd.reduce((x,y) => (if(x._2 < y._2) y else x)) x和y在我们传统的函数中,它是固定的。但是Scala中,就不是了。刚开始传入的是第一个元素和第二个元素,后面的就是返回值和下一个元素。如上面 第一次传参:为下面两个 ("Michael",29)("Andy",30) 但是比较之后,由于30大于29,因为返回的是("Andy",30),("Andy",30)与第三个元素作为参数传入,("Andy",30)跟第三个元素比较("Justin",19)。 由于30大于19,因此依旧返回的是("Andy",30).依次类推。最后得出结果。 与hadoop中reduce函数比较 hadoop中reduce函数,一般用于统计数据。比如wordcount中统计单词的个数等。