私はRxJavaを使用してIDで結合する必要がある2つの大きなデータセット(数百万のレコード)を処理しています。これらの2つのデータセットには必ずしも同じレコードが含まれているとは限りません。しかし、それらはIDによってソートされます。RxJavaで2つの大きなデータセットに結合する
私はjoin
メソッドを使用することができ、以下の実験では「完全結合」を行い、一致するレコードでフィルタリングすることがわかりました。
public class BatchTest
{
public static void main (String[] args)
{
Observable<Integer> myLeft = Observable.just (1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Observable<Integer> myRight = Observable.just (1, 3, 5, 7, 9);
myLeft.join (
myRight,
new Func1<Integer, Observable<Integer>>()
{
public Observable<Integer> call (Integer aT)
{
return Observable.never();
}
},
new Func1<Integer, Observable<Integer>>()
{
public Observable<Integer> call (Integer aT)
{
return Observable.never();
}
},
new Func2<Integer, Integer, Integer[]>()
{
public Integer[] call (Integer aT1, Integer aT2)
{
return new Integer[] {aT1, aT2};
}
})
.filter (new Func1<Integer[], Boolean>()
{
public Boolean call (Integer[] aT)
{
return aT[0].equals (aT[1]);
}
})
.subscribe (new Action1<Integer[]>()
{
public void call (Integer[] aT)
{
System.out.printf ("%d, %d\n", aT[0], aT[1]);
}
});
}
}
これは小さな一連の例では問題ありませんが、大きなセットでは非常に効率が悪いです。
私の質問は、セットがキーでソートされていることを示しています。これらのセレクタ/ウィンドウ関数を使用して結合を制限する方法はありますか?300万レコードに300万レコードを追加する必要はありません。記録?
これは間違ったやり方ですか?