私は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. Spark(Scala)で2つのRDDを結合する方法は?
- 4. Apache Sparkで2つのRDDに参加する
- 5. キャッシュされたSpark RDDを再利用
- 6. Pythonで2つのRDDを結合するSpark
- 7. カスタム関数で2つのRDDを結合する - SPARK
- 8. Pythonで2つのネストされたdictをマージするには?
- 9. Apache Spark:異なるパーティショナーと2つのRDDに参加する
- 10. Apache Spark RDDのコレクションを1つのRDDに変換するJava
- 11. SparkでScalaを使用して2つのRDDに参加
- 12. RDDの2つの異なるタイプをマージする
- 13. Sparkで既存のRDDにRDDを追加するには?
- 14. マップでRddをマージする
- 15. spark(scala)3つの分離したrdd [org.apache.spark.mllib.linalg.Vector]を1つのrdd [Vector]
- 16. ブレイクリニアgitは2つのマージされたブランチにコミットします
- 17. spark rddの読みやすさを改善するには?
- 18. Pythonでスパークするタプルを使って作業する - 2つのRDDを結合した後に2つのタプルをマージするには
- 19. Spark RDDまたはデータフレーム内のランダムシャッフル列
- 20. Apache SparkでSetタイプの2つのRDDを追加/連結します
- 21. スカラーを使って2つの異なるrddをマージする方法
- 22. Spark RDD Iiterableから2つの要素の合計を取得する方法
- 23. Apache Spark RDDワークフロー
- 24. トランザクションブロック| Spark SQL、rdd
- 25. RDD Aggregate in spark
- 26. Javaを使ってsparkで3つのRDDテーブルを結合するには?
- 27. Spark DataFrame(RDD)のメタデータ
- 28. Array RDDをSparkのList RDDに変換できない
- 29. SASで2つのデータセットをマージします。マージされたデータの変数を選択する方法は?
- 30. RDDを2つのRDDに分割し、その結果をPySparkでRDDとして保存する方法は?