spark用的Scala编写的。因此这里的map和reduce,也就是Scala的map和reduce。scala 有很多函数,而且很方便。这里想写下map和reduce函数,也是看到一篇帖子,感觉Scala非常有意思。键值对rdd求value最大值【http://www.aboutyun.com/forum.php?mod=viewthread&tid=21747】
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中统计单词的个数等。