私は2つの大きなcsvファイルを列の1つにあらかじめ並べています。もう一度完全な並べ替えを行わずに、新しい並べ替えられたRDDをすばやく取得するようにソートされているという事実を使用する方法はありますか?sparkで2つのプリセットされたrddをマージするには?
答えて
短い答え:いいえ、Apache Sparkが提供する並べ替え機能を使用しているときに2つの入力RDDが既にソートされているという事実を利用する方法はありません。
長い答え:特定の条件下では、sortBy
またはsortByKey
を使用するよりも良い方法がある可能性があります。
最も明白なケースは、入力RDDが既にソートされており、異なる範囲を表している場合です。この場合、rdd1
のすべての要素が(選択された順序に従って)rdd2
のすべての要素の前に来ると仮定して、入力RDDを結合するための最も速い(実質的にゼロのコストの)方法は、rdd1.union(rdd2)
を使用することです。
入力RDDの範囲が重複すると、状況がより複雑になります。ターゲットRDDが単一のパーティションしか持たないと仮定した場合、両方のRDDでtoLocalIterator
を使用して手動でマージすると効率的です。結果がRDDでなければならない場合は、カスタムRDDタイプのcompute
メソッド内でこれを行い、入力RDDを処理して出力を生成することができます。
入力が大きく、多くのパーティションで構成されていると、処理がさらに複雑になります。この場合、出力RDDにも複数のパーティションが必要になることがあります。前述のカスタムRDDを使用できますが、複数のパーティションを作成することもできます(RangePartitioner
を使用)。各パーティションは異なる要素の範囲をカバーする(最適な場合、これらの範囲は出力のほぼ同じ大きさの部分をカバーする)。
このような難しい部分は、compute
の中に完全な入力RDDを複数回処理することを避けることです。これは、入力RDDがRangePartitioner
を使用しているときfilterByRange
をOrderedRDDFunctions
から効率的に回避することができます。彼らがRangePartitioner
を使用していないにもかかわらず、パーティションが内部的に注文され、グローバルオーダを持っていることがわかっている場合は、実際にデータを調査して、これらのパーティションがカバーする有効範囲を調べる必要があります。
複数のパーティションのケースがかなり複雑なので、カスタムメイドソートが実際にsortBy
またはsortByKey
を使用するよりも実際に高速かどうかを確認します。 sortBy
とsortByKey
のロジックは、シャッフル処理(ノード間でのデータ転送)に関して高度に最適化されています。この理由から、カスタムメイドロジックがO(n)であっても、sortBy
/sortByKey
がO(n log(n))であっても、多くの場合、これらのメソッドはカスタムメイドロジックより高速です。最高でも。
Apache Sparkで使用されるシャッフルロジックの詳細については、articleの基本概念を説明しています。
- 1. 2つのSparkコンテキスト間でSpark RDDを共有するには?
- 2. Sparkで2つのRDDをシリアルで処理するには?
- 3. Apache Sparkで2つのRDDに参加する
- 4. キャッシュされたSpark RDDを再利用
- 5. Pythonで2つのRDDを結合するSpark
- 6. Apache Spark:異なるパーティショナーと2つのRDDに参加する
- 7. Apache Spark RDDのコレクションを1つのRDDに変換するJava
- 8. SparkでScalaを使用して2つのRDDに参加
- 9. Sparkで既存のRDDにRDDを追加するには?
- 10. spark(scala)3つの分離したrdd [org.apache.spark.mllib.linalg.Vector]を1つのrdd [Vector]
- 11. spark rddの読みやすさを改善するには?
- 12. ブレイクリニアgitは2つのマージされたブランチにコミットします
- 13. Spark RDDまたはデータフレーム内のランダムシャッフル列
- 14. スカラーを使って2つの異なるrddをマージする方法
- 15. RDD Aggregate in spark
- 16. Apache Spark RDDワークフロー
- 17. トランザクションブロック| Spark SQL、rdd
- 18. Pythonでスパークするタプルを使って作業する - 2つのRDDを結合した後に2つのタプルをマージするには
- 19. Javaを使ってsparkで3つのRDDテーブルを結合するには?
- 20. Array RDDをSparkのList RDDに変換できない
- 21. Spark RDD [Array [MyObject]]をRDDに変換する方法[MyObject]
- 22. spark rddをpandasデータフレームに変換する
- 23. 列をRDDに追加するSpark 1.2.1
- 24. RDD(Spark)のアイテムをRDDの多くのアイテムに変換する方法は?
- 25. RDDを2つのRDDに分割し、その結果をPySparkでRDDとして保存する方法は?
- 26. SparkのケースクラスのRDDにデータフレームを戻す
- 27. Spark rddとSpark sqlの関係は何ですか?
- 28. SASで2つのデータセットをマージします。マージされたデータの変数を選択する方法は?
- 29. Sparkで同じRDDを2回キャッシュするとどうなるのですか?
- 30. RDDで配列をマージする方法