在Google 的论文《MapReduce:Simplified Data Processing on Large Clusters》中提到“Our abstraction is inspired by the map and reduce primitives present in Lisp and many other functional lanuages.”。对于大部分不熟悉函数语言的程序员来说,可能并不能够彻底理解Map和Reduce的具体含义。在这篇文章中,将采用C语言实现函 数语言中的Map和Reduce操作。
简单来说,Map是对一组数据中的每个元素进行操作,产生一组全新的数据;Reduce是对这组数据进行归约,得到一个相对简单的结果。现在就让我们用C语言来描述它们。
#include
<
stdio.h
>
//
函数指针申明
typedef
int
(
*
mapFunction)(
int
);
typedef
int
(
*
reduceFunction)(
int
,
int
);
#define
ERROR -1;

//
-----------------Map和Reduce操作-----------------
/*
* 对list数组的数据进行处理,然后存储在list数组中
*/
void
map(mapFunction func,
int
*
list,
int
len)
{
int i;
for(i=0;i<len;i++){
list[i] = func(list[i]);
}
}

int
reduce(reduceFunction func,
int
*
list,
int
len)
{
if(len <= 0){
return ERROR;
}
int retVal = 0;
int i;
for(i=0;i<len;i++){
retVal = func(retVal,list[i]);
}
return retVal;
}

//
-----------------------测试-------------------------
int
square(
int
i)
{
return i*i;
}

int
add(
int
i,
int
j)
{
return i+j;
}

int
main(
int
argc,
char
*
argv[])
{
int array[5];
int i;
for(i=0;i<5;i++){
array[i] = i;
}

mapFunction mapFuncPointer = (mapFunction)□
reduceFunction reduceFuncPointer = (reduceFunction)&add;
map(mapFuncPointer,array,5);
int result = reduce(reduceFuncPointer,array,5);
printf("The result is %d ",result);
return 0;
}
参考:(1)
从Map和Reduce说起
简单来说,Map是对一组数据中的每个元素进行操作,产生一组全新的数据;Reduce是对这组数据进行归约,得到一个相对简单的结果。现在就让我们用C语言来描述它们。



















































