RDD1.join(RDD2)
で2つのRDDに簡単に結合できます。しかし、List<JavaRDD>
に任意の数のRDDを保持すると、どうすれば効率的にそれらに参加できますか?任意の数のRDDに効率的に参加するにはどうすればいいですか?
4
A
答えて
2
最初に、に参加できないことに注意してください。 (どれもがない場合、それは、インデックスを追加するために有用)など
[flat]mapToPair()
zipWithIndex()
cartesian()
groupBy()
(またはkeyBy()
)を :あなたが使用して
JavaPairRDD
を取得する必要があります
次に、 ISTは、あなたは、このようにそれらすべてに参加することができます。それは、さらに加入との互換性になり
JavaPairRdd<Integer,String>
に戻す
JavaPairRDD<Integer, Tuple2<String,String>>
をマップするため
JavaPairRDD<Integer, String> linesA = sc.parallelizePairs(Arrays.asList(
new Tuple2<>(1, "a1"),
new Tuple2<>(2, "a2"),
new Tuple2<>(3, "a3"),
new Tuple2<>(4, "a4")));
JavaPairRDD<Integer, String> linesB = sc.parallelizePairs(Arrays.asList(
new Tuple2<>(1, "b1"),
new Tuple2<>(5, "b5"),
new Tuple2<>(3, "b3")));
JavaPairRDD<Integer, String> linesC = sc.parallelizePairs(Arrays.asList(
new Tuple2<>(1, "c1"),
new Tuple2<>(5, "c6"),
new Tuple2<>(6, "c3")));
// the list of RDDs
List<JavaPairRDD<Integer, String>> allLines = Arrays.asList(linesA, linesB, linesC);
// since we probably don't want to modify any of the datasets in the list, we will
// copy the first one in a separate variable to keep the result
JavaPairRDD<Integer, String> res = allLines.get(0);
for (int i = 1; i < allLines.size(); ++i) { // note we skip position 0 !
res = res.join(allLines.get(i))
/*[1]*/ .mapValues(tuple -> tuple._1 + ':' + tuple._2);
}
[1]
とラインは、重要なものです。
chrisw回答に基づいて、これはこのような「1行」に入れることができます:パフォーマンス上の
JavaPairRDD<Integer, String> res;
res = allLines.stream()
.reduce((rdd1, rdd2) -> rdd1.join(rdd2).mapValues(tup -> tup._1 + ':' + tup._2))
.get(); // get value from Optional<JavaPairRDD>
最後に、いくつかの考え。上記の例では、結合の結果を同じタイプのRDDに戻すために文字列連結を使用しました。 RDDがたくさんある場合は、のfor loop
バージョンを使用して、これを少し早めることができます。ここでは最初に手で参加します。必要に応じて詳細を掲載します。
1
私はJavaRDDクラス/インタフェースに慣れていないんだけど、おそらくあなたは、Stringクラスでhttps://docs.oracle.com/javase/tutorial/collections/streams/reduction.html
final List<JavaRDD> list = getList(); // where getList is your list implementation containing JavaRDD instances
// The JavaRDD class provides rdd() to get the RDD
final JavaRDD rdd = list.stream().map(JavaRDD::rdd).reduce(RDD::join);
例を参照して、Javaの8に高階関数reduce
を使用してこの問題を解決できるだろう何かのように: -
を生成
Stream.of("foo", "bar", "baz").reduce(String::concat);
foobarbaz
関連する問題
- 1. Django - データベースに昇順でエントリを効率的に追加するにはどうすればいいですか?
- 2. Pandasはメモリに効率的に参加していますか?
- 3. 多数の小さなJSONデータチャンクを効率的にデコードするにはどうすればいいですか?
- 4. 複数のキーで「個別」を効率的に実行するにはどうすればよいですか?
- 5. オブジェクトから親オブジェクトの親に効率的にアクセスするにはどうすればいいですか?
- 6. MySQLの任意の数のテーブルに参加するには?
- 7. ディレクトリ内のファイル数を効率的に取得するにはどうすればよいですか?
- 8. WPF:任意のウィンドウ内でアプリケーションリソースのテキストブロックを参照するにはどうすればよいですか?
- 9. Dartの要素に任意のHTMLを追加するにはどうすればよいですか?
- 10. Gatsbyで任意のファイルを/ publicに追加するにはどうすればよいですか?
- 11. コレクションの個別フィールドを効率的に数えるにはどうすればよいですか?
- 12. Rでツイートを効率的に検索するにはどうすればいいですか?パッケージTwitterに
- 13. ラケットで任意の数の引数でカリングを使用するにはどうすればよいですか?
- 14. hdfsのファイル名をより効率的に変更するにはどうすればいいですか?
- 15. 2つのBSTを効率的にマージするにはどうすればいいですか?
- 16. このPythonコードをより効率的にするにはどうすればいいですか?
- 17. プロットの要素をipywidgetsで効率的に置き換えるにはどうすればいいですか?
- 18. JsonListをJava Object Listに効率的にマッピングするにはどうすればいいですか?
- 19. Elasticsearchに表データを効率的に保存するにはどうすればいいですか?
- 20. LINQの任意の方法が効率的ですか?
- 21. AppKitへの独立したプロセスを効率的に行うにはどうすればいいですか?
- 22. 乱数ベクトルの任意の数の列を作成するにはどうすればよいですか?
- 23. LUIS - 任意の検索の目的でワイルドカードを認識するにはどうすればよいですか?
- 24. これをより効率的にするにはどうすればよいですか? - JavaのIF文
- 25. このネストされたイテレーターチェックをDRYと効率的にするにはどうすればよいですか?
- 26. 汎用オブジェクトに任意の数のプロパティを設定するにはどうすればよいですか?
- 27. Canvasに多くのピクセルを効率的に描画するにはどうすればよいですか?
- 28. サイファーで効率的にグループ化するにはどうすればいいですか?
- 29. ドットプロダクトメソッドをJavaでより速く効率的にするにはどうすればいいですか?
- 30. 現在のタイプを参照している複数のモデルを効率的に取得するにはどうすればよいですか?
私は考えを打ち負かすと思うが、JavaRDD ::は結びつきません。 – SpiderRico
私はちょうどjavadocを見てきました。もし 'rdd()'メソッドがRDDを返したら、map higher order関数を使うことができます。ammendment – chrisw