0
我有2個矩陣輸入需要相互相乘,我試圖用map-reduce來做到這一點。所以,我把它們映射這樣在Apache Spark中迭代一個元組
def flatMapper(line):
tokens = line.split(' ')
matrixName = str(tokens[0])
row = int(tokens[1])
column = int(tokens[2])
value = int(tokens[3])
if (matrixName == "A"):
for i in range(0,5):
yield((row, i), ("A", column, value)) // (row, i) is key and ("A", column, value) is column
elif (matrixName == "B"):
for i in range(0,5):
yield((i, column), ("B", row, value))
因爲它可以在這裏看到,我生產的每一行多個鍵 - 值對。
之後,我將它們按鍵組合。然後對於每個鍵值對((i,j),(「matrixname」,x,value)),我需要將這些值相乘,使得它們的x是相同的,並且matrixname的不同,求和所有結果,即矩陣中第(i,j)個元素的值。所以我需要編寫一個reducer來迭代給定鍵的值列表,但是我被卡在了這裏。我如何迭代我的自定義reducer函數中的值列表? (我試過但它沒有工作)
result = result.reduceByKey(lambda k, v: reducer(k, v))
編輯︰我看到實際上flatMap成功地創建鍵值對。我已經使用了內建函數reduceByKey(add),它通過它們的鍵附加了這些列表分組。這裏的問題是,我無法編寫自定義的Reducer代碼,因爲我無法用自定義函數遍歷鍵。如何實現這一目標?