reduce()方法是一个高阶函数,它接受集合中的所有元素(数组,列表等),并使用二进制运算将它们组合以产生单个值。必须确保运算是可交换的和关联的。匿名函数作为参数传递给reduce函数。句法:
val l = List(2, 5, 3, 6, 4, 7) // returns the largest number from the collection l.reduce((x, y) => x max y)
通过reduce方法选择数字进行运算的顺序是随机的。这就是为什么不优选非交换和非关联运算的原因。例子:
// Scala program to
// print maximum value
// using reduce()
// Creating object
object GfG
{
// Main method
def main(args:Array[String])
{
// source collection
val collection = List(1, 3, 2, 5, 4, 7, 6)
// finding the maximum valued element
val res = collection.reduce((x, y) => x max y)
println(res)
}
}
输出:
7
在上述程序中,reduce方法选择随机对,并找出特定对中的最大值。再次将这些值相互比较,直到获得单个最大值元素。在处理Spark中的弹性分布式数据集时,我们通常会同时使用reduce()方法和map()方法。 map()方法帮助我们将一个集合转换为另一个集合,而reduce()方法则使我们能够执行某些操作。
使用map()和reduce()查找平均值:
例:
// Scala program to
// print average
// using map() and reduce()
//Creating object
object GfG
{
// Main method
def main(args:Array[String])
{
// source collection
val collection = List(1, 5, 7, 8)
// converting every element to a pair of the form (x,1)
// 1 is initial frequency of all elements
val new_collection = collection.map(x => (x,1))
/*
List((1, 1), (5, 1), (7, 1), (8, 1))
*/
// adding elements at correspnding positions
val res = new_collection.reduce( (a,b) => ( a._1 + b._1,
a._2 + b._2 ) )
/*
(21, 4)
*/
println(res)
println("Average="+ res._1/res._2.toFloat)
}
}
输出:
(21, 4) Average= 5.25
在上面的程序中,集合的所有元素都被转换为带有两个元素的元组。元组的第一个元素是数字本身,第二个元素是计数器。最初,所有计数器都设置为1。输出本身是具有两个元素的元组:第一个值是总和,第二个值是元素数。注意:reduce()方法给出的输出类型与集合元素的类型相同。
相关用法
- Scala aggregate()用法及代码示例
- Scala String indexOf(String str)用法及代码示例
- Scala String contentEquals()用法及代码示例
- Scala Map size()用法及代码示例
- Scala SortedMap addString()用法及代码示例
- Scala Iterator addString()用法及代码示例
- Scala String substring(int beginIndex, int endIndex)用法及代码示例
- Scala Set &()用法及代码示例
注:本文由纯净天空筛选整理自MohammadKhalid大神的英文原创作品 Scala | reduce() Function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。