Map-reduce 矩阵

来自微博的题目: Map Reduce 矩阵。

新的矩阵的值,是原来矩阵附近8个临近节点的均值。


python代码实现:

# input: element is the key value pair of matrix
#        type:    [row, column, value, totle_row, totle_column]
def mapper(elem):
    row = elem[0]
    col = elem[1]
    val = elem[2]
    t_row = elem[3]
    t_col = elem[4]

    if (row == 0):
        if (col == 0):
            mr.emit_intermediate(str("0,1"), val)
            mr.emit_intermediate(str("1,0"), val)
            mr.emit_intermediate(str("1,1"), val)
        elif (col == t_col - 1):
            mr.emit_intermediate(str("0,")+str(t_col-2), val)
            mr.emit_intermediate(str("1,")+str(t_col-1), val)
            mr.emit_intermediate(str("1,")+str(t_col-2), val)
        else:
            mr.emit_intermediate(str("0,")+str(col-1), val)
            mr.emit_intermediate(str("0,")+str(col+1), val)
            mr.emit_intermediate(str("1,")+str(col), val)
            mr.emit_intermediate(str("1,")+str(col-1), val)
            mr.emit_intermediate(str("1,")+str(col+1), val)
    elif (row == t_row - 1):
        if (col == 0):
            mr.emit_intermediate(str(row-1)+str(col), val)
            mr.emit_intermediate(str(row)+str(col+1), val)
            mr.emit_intermediate(str(row-1)+str(col+1), val)
        elif (col == t_col - 1)
            mr.emit_intermediate(str(row)+str(col-1), val)
            mr.emit_intermediate(str(row-1)+str(col), val)
            mr.emit_intermediate(str(row-1)+str(col-1), val)
        else:
            mr.emit_intermediate(str(row)+str(col-1), val)
            mr.emit_intermediate(str(row)+str(col+1), val)
            mr.emit_intermediate(str(row-1)+str(col), val)
            mr.emit_intermediate(str(row-1)+str(col-1), val)
            mr.emit_intermediate(str(row-1)+str(col+1), val)
    else:
            mr.emit_intermediate(str(row-1)+str(col-1), val)
            mr.emit_intermediate(str(row-1)+str(col), val)
            mr.emit_intermediate(str(row-1)+str(col+1), val)
            mr.emit_intermediate(str(row)+str(col-1), val)
            mr.emit_intermediate(str(row)+str(col+1), val)
            mr.emit_intermediate(str(row+1)+str(col), val)
            mr.emit_intermediate(str(row+1)+str(col-1), val)
            mr.emit_intermediate(str(row+1)+str(col+1), val)

def reducer(key, list_of_values):
    arithmetic_mean = float(sum(list_of_values))/len(list_of_values)
    ret = [int(x) for x in key.split(",")]
    ret.append(arithmetic_mean)
    mr.emit(ret)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值