記事ディレクトリ
1. DataSetを作成するいくつかの方法
- 1. DataFrameからDataSetに変換する
- 2. SparkSession.createDataSet()を介して直接作成します
- 3. toDSメソッドによる暗黙の変換
2. DataFrameとRDDの違いは何ですか
RDD機能:
- RDDは、Lambda式をサポートできる遅延実行不変並列データコレクションです。
- RDDの最大の利点はシンプルであり、APIは非常にユーザーフレンドリーです。
- RDDの欠点はパフォーマンスの制限であり、これはJVMのメモリ常駐オブジェクトであり、GCの制限の存在と、データが増加した場合のJavaシリアル化のコストの増加を決定します。
DataFrameの機能:
- RDDと同様に、DataFrameも分散データコンテナーです。ただし、DataFrameは従来のデータベースの2次元テーブルに似ています。データに加えて、データの構造情報、つまりスキーマも記録します。同時に、Hiveと同様に、DataFrameはネストされたデータ型もサポートします(構造体、配列、およびマップ)APIの使いやすさの観点から、DataFrame APIは、機能的なRDD APIよりも使いやすい一連の高レベルの関係演算を提供し、しきい値は低くなっています。RおよびPandas DataFrameに類似しているため、Spark DataFrameは、従来のスタンドアロンデータ分析の開発経験を十分に継承しています
3. SparkSqlは構造化データと非構造化データをどのように処理しますか
- 構造化データ:JsonはDataFrameに変換され、SQLはレジストリを介して操作されます
- 非構造化データ:リフレクション推論を通じてスキーマを構築します
4. RDD DataFrame DataSetの違い
- 実際、データセットはデータフレームのアップグレードバージョンであり、データフレームはデータセットのサブセットに相当します。主な違いは、spark2.0の後にデータセットに追加されたエンコーダは、データフレームのオブジェクト指向プログラミングのアイデアではなく、オブジェクト指向プログラミングとデータセットは統合されたバージョンのデータフレームとrddに相当し、操作をより柔軟にします
1.RDD
利点:
- コンパイル時の型安全性
- 型エラーはコンパイル時にチェックできます
- オブジェクト指向プログラミングスタイル
- クラス名のポイントを介して直接データを操作する
短所:
- シリアライゼーションとデシリアライゼーションのパフォーマンスオーバーヘッド
- クラスター間の通信であっても、IO操作であっても、オブジェクトの構造とデータはシリアル化および逆シリアル化する必要があります。
- GCパフォーマンスのオーバーヘッド、オブジェクトの頻繁な作成と破棄により、必然的にGCが増加します
2.DataFrame
- DataFrameはスキーマとオフヒープを導入します
- スキーマ:RDDデータの各行の構造は同じであり、この構造はスキーマに格納されます。Sparkはスキーマを介してデータを読み取ることができるため、通信およびIOの場合、シリアル化解除されたデータをシリアル化するだけでよく、構造は一部省略可
3.DataSet
- DataSetはRDDとDataFrameの利点を組み合わせ、新しい概念のエンコーダーをもたらします
- データをシリアル化するとき、エンコーダーはバイトコードを生成してオフヒープとやり取りします。これにより、オブジェクト全体を逆シリアル化せずにオンデマンドでデータにアクセスする効果を実現できます。
5. Spark SQL実行プロセス
1)読み取りSQLステートメントを分析する
- SQLステートメントのキーワード(select、from、whereなど)、式、プロジェクション、データソースなどを特定します。
- SQLステートメントが標準化されているかどうかを確認する
2)SQLステートメントとデータベースのデータディクショナリのバインド
- データディクショナリ:列、テーブル、ビューなど
- 関連するProjection DataSourceなどが存在する場合、SQLステートメントを実行できることを意味します
3)データベースは最適な実行計画を選択します
- データベースは統計を実行するいくつかの実行計画を提供します
- データベースは、上記のさまざまな実行計画から最適な計画を選択します
4)実行計画
- 操作->データソース->結果の順に実行します
- 実行の過程で、物理テーブルを読み取って結果を返す必要がない場合もあります。
Six。Spark SQL原則
- Cayalystは、spark sql実行オプティマイザーのコード名です。すべてのspark sqlステートメントは、最終的に解析されて最適化され、最終的に実行可能なJavaバイトコードが生成されます。
- Catalystの主なデータ構造はツリーです。すべてのSQLステートメントはツリー構造で保存されます。ツリー内の各ノードにはクラスと0個以上の子ノードがあります。scalaで定義される新しいノードタイプはTreeNodeですこのクラスのサブクラス
- Catalystのもう1つの重要な概念はルールです。基本的にすべての最適化はルールに基づいています。ルールを使用してツリーを操作できます。ツリー内のノードは読み取り専用であるため、ツリーも読み取り専用です。ルールで定義された関数は実装できますツリーから新しいツリーに変換する
Catalyst実行プロセス全体は、次の4つの段階に分けることができます。
- 1)分析ステージ、ロジックツリーの分析、参照の解決
- 2)ロジック最適化ステージ
- 3物理的な計画段階で、Catalystは複数の計画を生成し、コストに基づいてそれらを比較します
- 4)コード生成段階
7。sparksqlのキャッシュモード
- 1):SqlContext instance.cacheTable( "テーブル名")を介して一時テーブルをキャッシュします
- 2):DataFrame instance.cache()を使用して仮想テーブルをキャッシュします
注意:registerTempTable不是action类型的算子,不发生缓存
8. Spark SQLでの結合操作と左結合操作の違い
- joinとsqlの内部結合操作は非常によく似ています。返される結果は、前のセットと次のセットが正常に一致し、無関係なものは除外されます
- 左結合\
- SQLの左外部結合と同様に、返される結果は主に最初のRDDであり、無関係なレコードは空です
- 一部のシナリオでは、左結合の代わりに左準結合を使用できます。
- 左側の準結合は(keySet)関係にあるため、右側のテーブルに重複レコードがある場合、左側のテーブルはスキップされてパフォーマンスが向上しますが、左側の結合は常にトラバースしますが、左側の準結合の最後の選択の結果には左側のみが表示されます。右側のテーブルには、関連付けの計算に関与する結合キーしかないため、テーブルの列名