2017-05-26 25 views
0

Java Sparkを使用して2つのJavaPairRDDをキーに基づいて比較し、その値を比較して同じキーがまったく同じ値であるかどうかを確認します。2つのJavaPairRDDをキーで比較し、値を比較する方法は?

は今のところ、私は交差点や労働組合の数を()をチェックしていますが、これは以下のように、十分ではありません。彼らは同じキーを持っている場合

 JavaPairRDD<String, String> intersectionJavaPairRDD = hBaseJavaPairRDD.intersection(hiveJavaPairRDD); 
     JavaPairRDD<String, String> unionJavaPairRDD = hBaseJavaPairRDD.union(hiveJavaPairRDD).distinct(); 

     if (intersectionJavaPairRDD.count() != unionJavaPairRDD.count() 
      || hiveJavaPairRDD.count() != hBaseJavaPairRDD.count()) { 
      System.err.println(
       "ERROR: SxS validation failed..."); 
      System.exit(-1); 
     } 

がどのようにそれぞれの値を比較することができますか?

ありがとうございます!

+0

combineByKey/AggregateByKeyを使用して値を比較できます。 – Knight71

答えて

1

私はscalaから来ていますが、少し構文が変わるとjavaでもうまくいくと思います。

私の考えは、2つのRDDに参加し、2つの値の列を比較することです。

val isEquals = hBaseJavaPairRDD 
       .join(hiveJavaPairRDD) 
       .map { 
       case (id, (v1, v2)) => v1 == v2 
       } 
       .reduce(_ && _) 

このソリューションの背後にある考え方は以下の通りです:各キーについては

  1. 我々は、同じ行の第一及び第二のRDD秒の値を置きます。これは、join操作で実行されます。
  2. 二つの値がfalseさもなければ
  3. そしてこのreduce関数を適用することがバイナリとしてANDRDDマッピングさに等しくしている場合、行ごとに、我々はtrueを置くように(RDDに加わった)結果の地図要素間の操作。 内のすべての要素は、RDDに参加している場合reduce関数を適用

truetrueを返しすなわちすべての値がされているそれ以外の場合falseに等しいです。

スカラにお答えいただきありがとうございます。

関連する問題