ビッグデータに関するSpark SQLの一般的なインタビューの質問

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)関係にあるため、右側のテーブルに重複レコードがある場合、左側のテーブルはスキップされてパフォーマンスが向上しますが、左側の結合は常にトラバースしますが、左側の準結合の最後の選択の結果には左側のみが表示されます。右側のテーブルには、関連付けの計算に関与する結合キーしかないため、テーブルの列名

おすすめ

転載: blog.csdn.net/sun_0128/article/details/107858345