第5章. 効果的なトランスフォーメーション
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
安定したストレージからRDD形式にデータを読み取り、RDDに対して多くの計算とデータ構造を実行し、結果のRDDを安定したストレージに書き込んだり、ドライバーに収集したりする。 このように、Sparkのパワーのほとんどは、RDD上で定義されRDDを返す演算子である変換から生まれる。
現在のところ、Sparkには約半ダースのタイプのRDDに特化した機能があり、それぞれが独自の特性と数多くの異なる変換関数を持っている。このセクションでは、あなたのRDD変換、あるいは一連の変換がどのように評価されるかを考えるためのツールを提供したい。 特に、これらの変換がどのような種類のRDDを返すのか、変換の間にRDDを永続化したりチェックポイントしたりすることが、計算をより効率的にするのかどうか、そして、与えられた一連の変換を、可能な限り最もパフォーマンスの高い方法で実行するにはどうすればよいのか、などである。
注
このセクションの変換は、Spark Core(およびMLlib)で使用されるRDDオブジェクトに関連するものである。RDDはSpark StreamingのDStreams内部でも使用されるが、機能や性能特性は異なる。同様に、この章で説明する関数のほとんどは、DataFrames ではまだサポートされていない。Spark SQLは異なるオプティマイザを持つため、この章の概念的には、Spark SQLの世界へ引き継がれるものばかりではない。
チップ
Sparkが前進するにつれて、Datasets上でより多くのRDD変換、Spark SQLで使用できるようになる。
ナローとワイドの違い
第2章では、変換のタイプ間の重要な区別として、依存関係が広いものと狭いものを紹介した。この区別は、変換の評価方法、ひいては変換の性能に強く影響するため、重要である。この小節では、幅の広い変換と幅の狭い変換をより正確に定義し、変換が幅の広いもの か幅の狭いものかを判断する方法を示し、なぜこの区別が評価と性能に重要なのかを 説明する。
チップ
Sparkは遅延評価される。つまり、変換はその変換に依存するアクションが呼び出されるまで実行されない。 遅延評価」で詳しく説明したように、これはフォールトトレランス、パフォーマンス、デバッグにとって重要な結果をもたらす。このヒントの情報がわかりにくい場合は、この章で必要なSpark実行エンジンの基本的な理解を得られる第2章を参照してほしい。
第2章で説明したことをまとめると、広い変換はシャッフルを必要とし、狭い変換はシャッフルを必要としない変換である。 ワイドとナローの依存関係」では、ナロー変換では、子パーティション(結果のRDDのパーティション)は親パーティションの既知のサブセットに依存すると説明した。 この定義は正しいが、ナロー変換の正式な定義と比べると正確さに欠ける。
Sparkの評価セマンティクスを最初に提示した2012年の論文では、"親RDDの各パーティションが、子RDDの最大1つのパーティションによって使用される "ものを、狭い依存関係を持つ変換と定義している。作成者は、広い依存関係を持つ変換を、"複数の子パーティションが(親の各パーティションに)依存する可能性がある "変換として定義している。この定義は、私たちが第2章で説明した、子RDDの依存関係に関して狭い依存関係と広い依存関係を定義したことのアナローグを述べている。対照的に、作成者の定義は、子RDDの依存関係ではなく、親RDDの依存関係という観点から、狭い依存関係と広い依存関係を定義した。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access