用C语言实现函数语言中的Map和Reduce操作

本文通过C语言实现MapReduce操作,介绍了MapReduce的基本概念及其实现过程。Map操作用于处理数组中的每个元素并生成新的数组,而Reduce操作则用于归约处理后的数据,最终得到单一结果。
在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)&square;
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说起
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值