在pyspark中使用多个变量输入的自定义地图函数返回错误结果

时间:2015-10-14 01:11:43

标签: python-3.x numpy matrix parallel-processing pyspark

作为我项目的一部分,我试图通过使用带有矩阵处理的map函数和将每个维度的min和max值封装为输入变量的向量,在大量矩阵上实现并行化归一化操作。代码如下:

import numpy as np
from functools import partial

def cf(A,MinValues,MaxValues):
   print("Result is ##################",A=(A-MinValues)/(MaxValues-MinValues))
   A=(A-MinValues)/(MaxValues-MinValues)
   return A

if __name__=='__main__':
   AMatrix=np.matrix([[1,5,9],[4,8,3],[7,2,6]])
   MinMatrix=np.matrix([1,2,3])
   MaxMatrix=np.matrix([7,8,9])
   ........
   sc.parallelize(AMatrix).map(partial(cf,MinValues=MinMatrix,MaxValues=MaxMatrix)).collect()

运行上面的代码后,它会在处理过程中通过打印操作在终端上显示正确的答案,但是最后总会显示[[无],[无],[无]],这意味着(我猜)在map()操作之后,spark只能收集包含[None]元素的列表。

这里的大师可能会告诉我这里发生了什么事吗?实现该功能的正确方法是什么?

提前很好

1 个答案:

答案 0 :(得分:0)

我运行此代码(python 2.7):

import numpy as np
from functools import partial

def cf(A,MinValues,MaxValues):
    #print "Result is " + str((A-MinValues)/(MaxValues-MinValues))
    A=(A-MinValues)/(MaxValues-MinValues)
    return A


AMatrix=np.matrix([[1,5,9],[4,8,3],[7,2,6]])
MinMatrix=np.matrix([1,2,3])
MaxMatrix=np.matrix([7,8,9])

print sc.parallelize(AMatrix).map(partial(cf,MinValues=MinMatrix,MaxValues=MaxMatrix)).collect()

这就是结果:

[matrix([[0, 0, 1]]), matrix([[0, 1, 0]]), matrix([[1, 0, 0]])]

我无法看到问题..