我正在使用Pyspark来实现regresion KNN算法,并且在使用RDD优化这部分代码时遇到了麻烦:
def x(rddInput, d):
rddList = []
rddInput = rddInput.zipWithIndex().map(lambda (x,y) : (y,x))
rddList.append(rddInput)
for index in range(1,d):
rddList.append(groupMapping(rddInput,index,d))
return spark.sparkContext.union(rddList).groupByKey().filter(lambda (x,y):len(y) == d).mapValues(list)
这个想法是,根据D的值,我必须将RDD分组为D行,例如:
_____D=2___________ D=3_________
|ROW10 ROW9| |ROW10 ROW9 ROW8|
|ROW9 ROW8 | |ROW9 ROW8 ROW7|
|ROW8 ROW7 | |ROW8 ROW7 ROW6|
|..........| |...............|
|ROW2 ROW1 | |ROW3 ROW2 ROW1|
该解决方案实际上可以工作,但是我必须对D个RDD副本进行合并,而这会占用过多的内存。是否有任何优化的解决方案可以在PySpark中使用RDD将内存成本较低的行分组?