2016-09-25 2 views
0

rddsのフィールドをキーで比較し、一致しない配列フィールドに値を設定しようとしますが、forループを使用できません。for scala sparkの場合のループの問題

ループのための第一フィールドチェックのために働いて、コメントされたコードの下

が、私はそのループのために仕事をするためにどのようにすべてのフィールドの比較

に任意のアイデアをカバーするためにforループを使用したいのすべてのフィールドとなるよう、 bは等しくないことができますか?

---a is of String type 
---b is of Array[String] type 
---c is of Array[String] type 

var i=0 
val joinedrdd = rdds1.join(rdds2) 
val res= joinedrdd.map { 
    case (a, (b, c)) => (
    //for (i <- 0 until (b.length - 1)){ 
     if (b(i).toString != c(i).toString) 
     {(a, b(i), c(i))} 
    //} 
    ) 
} 
+0

これらの値を設定する基準は何ですか? –

答えて

1

私にはわからない、他のより効率的なアプローチがあるかもしれません。しかし、zipArraymapの2つの値があり、それらが異なるかどうかを調べ、そうであれば戻り値を置き換えます。それ以外の場合は値を返します。

jrdd.map { 
    case (id, (xs, ys)) => (id, xs.zip(ys).map { 
    case (x, y) if x == y => x // if x = y return x or y 
    case _ => "random" // if they differ then return random 
    }) 
} 

私はちょうどhereのことを見て/テストすることができます。

+0

Albertoに感謝します。私はあなたのサンプルコードとほとんど同じものを探していました。しかし、ケース_ => "ランダム"の要素を埋めることを無視または回避できる方法があれば 私は、等しくない要素だけを必要とし、すべての等しい要素を無視します。 ありがとうございます! – chaitupadi

+0

私に例を教えてください。説明はかなり曖昧です –

+0

決して気にしません。私はそれを訂正しました。あなたの時間をありがとう、ありがとう。.. :) – chaitupadi

関連する問題