0

Python を使用した Spark での次の map reduce の演習で問題が発生しています。私の map 関数は次の RDD を返します。

rdd = [(3, ({0: [2], 1: [5], 3: [1]}, set([2]))),
(3, ({0: [4], 1: [ 3], 3: [5]}, set([1]))),
(1, ({0: [4, 5], 1: [2]}, セット([3)))]

同じキーを持つタプルでいくつかの計算を行うことになっているレデューサー関数を作成しました (前の例では、最初の 2 つのキー = 3 で、最後のキーは 1 です)。

def Reducer(k, v):
 cluster = k[0]
 rows = [k[1], v[1]]
 g_p = {} 
 I_p = set()
 for g, I in rows:
     g_p = CombineStatistics(g_p, g)
     I_p = I_p.union(I)
 return (cluster, [g_p, I_p]) 

問題は、k と v が常に同じキー (つまりk[0]==v[0]) を持つことを期待していることです。しかし、このコードには当てはまりません。

私は Databricks プラットフォームに取り組んでいますが、正直なところ、デバッグできないことは悪夢であり、「印刷」が機能しないこともあります。この環境で仕事をするのは本当にイライラします。

4

1 に答える 1

0

同じキーに基づいて RDD を減らしたい場合は、変換reduceByKeyの代わりに使用する必要があります。関数名を置き換えた後、関数へのパラメーターは値 (およびあなたの場合) であり、rdd 行全体ではないreduceことを考慮する必要があります。reduceByKeyk[1]v[1]

レデューサー関数内の印刷は、databricks の分散環境では機能しません。これは、この関数がエグゼキューター (Amazon クラウド内) で評価されるためです。ローカル モードで spark を起動すると、すべての python プリントが機能します (ただし、databricks でローカル モードを使用できるかどうかはわかりません)。

于 2017-01-07T11:13:08.247 に答える