Databricks Apache Spark Developer Associate試験は、 SparkのコアアーキテクチャからDataFrame API・Spark SQL・Structured Streamingまで Apache Sparkの実践的なコーディングスキルを問う試験です。 この記事では7つの出題ドメインと配点表を示した上で、コード問題の特徴と攻略法を解説し、 代表ドメインから練習問題3問を掲載しています。
Spark Developer Associate試験は45問・120分で、以下の7ドメインから出題されます。コード読解を含む問題が全体の30〜35%を占めるのが他のDatabricks試験との大きな違いです。
| ドメイン | 配点比率 | 主なトピック |
|---|---|---|
| DataFrame API & Spark SQL | 約25% | select・filter・groupBy・join・withColumn・ウィンドウ関数 |
| Sparkアーキテクチャ | 約15% | Driver/Executor・ジョブ/ステージ/タスク・Narrow/Wide Transformation |
| Catalyst & Tungsten | 約12% | 論理計画・物理計画・述語プッシュダウン・カラムプルーニング・AQE |
| データ読み書き | 約13% | DataFrameReader/Writer・Parquet/CSV/JSON・スキーマ推論・パーティション |
| Structured Streaming | 約13% | readStream/writeStream・出力モード・ウォーターマーク・トリガー |
| パフォーマンス最適化 | 約12% | キャッシュ・ブロードキャストジョイン・パーティション数・データスキュー対策 |
| Delta Lake基礎 | 約10% | ACIDトランザクション・Time Travel・スキーマ進化・基本的なDML |
Spark Developer試験では全45問中14〜16問がコード問題です。他のDatabricks試験(DEA・MLA等)のコード問題比率(約15〜20%)より高く、APIの正確な知識と実行結果のイメージ力が合否を分けます。
コード問題を確実に正答するためのポイントは3つあります。
select → filter → groupBy → agg → orderByのような変換チェーンを読み、最終的なDataFrameのスキーマと行数を予測する問題が最頻出です。特にgroupByの集計結果の行数(ユニークキーの数)と、aggで指定した集計関数(count・sum・avg・max・min)の結果カラム名がポイントになります。
Catalystが適用する代表的な最適化ルールを問う問題が出題されます。述語プッシュダウン(フィルタ条件をデータソース読み込み時に適用)、カラムプルーニング(不要カラムの読み込みを省略)、定数畳み込み(コンパイル時に定数式を評価)、ジョイン順序の最適化(小テーブルを先にブロードキャスト)が4大ルールです。
Append / Complete / Updateの3つの出力モードの違いと、ウォーターマークの目的(遅延データの許容範囲定義・ステートのメモリ管理)が頻出です。集約クエリにAppendモードを使うにはウォーターマークが必須という制約も問われます。
DataFrame API・Catalyst Optimizer・Structured Streamingから各1問を掲載しています。コードを読んで実行結果をイメージしてから選択肢を選びましょう。
DataFrame API
問題 1
以下のPySparkコードの実行結果として正しいものはどれですか? df = spark.createDataFrame( [("Alice", "Sales", 5000), ("Bob", "Sales", 6000), ("Carol", "Eng", 7000), ("Dave", "Eng", 7000)], ["name", "dept", "salary"]) from pyspark.sql.window import Window from pyspark.sql.functions import rank w = Window.partitionBy("dept").orderBy(col("salary").desc()) result = df.withColumn("rnk", rank().over(w)).filter(col("rnk") == 1) result.select("name", "dept").show()
正解: C
rank()ウィンドウ関数はpartitionBy('dept')で部門ごとに分割し、salary降順でランクを付けます。Sales部門ではBob(6000)がrank=1、Alice(5000)がrank=2です。Eng部門ではCarolとDaveが同額(7000)のためどちらもrank=1になります。rank()は同順位に同じランクを付与するため、Eng部門からrank=1が2行出力されます。filterでrnk==1を絞り込むと、Bob・Carol・Daveの3行が結果になります。dense_rank()でも同じ結果ですが、row_number()を使った場合は同額でも順序が一意に決まるため2行になります。この違いはSpark Developer試験のウィンドウ関数問題で頻出です。
Catalyst Optimizer
問題 2
以下のSpark SQLクエリに対してCatalyst Optimizerが適用する最適化として正しいものはどれですか? SELECT name, salary FROM employees WHERE dept = 'Engineering' AND salary > 100000
正解: A
Catalyst Optimizerは複数の最適化ルールを同時に適用します。このクエリでは、(1)カラムプルーニング:SELECTで使用するname・salaryに加え、WHERE句で使用するdeptの3カラムのみをParquetファイルから読み込みます(他のカラムは読み込まない)。(2)述語プッシュダウン:dept='Engineering'とsalary>100000のフィルタ条件をParquetファイルのRow Group統計情報と照合し、条件に合致しないRow Groupをスキップします。この2つの最適化により、不要なI/Oが大幅に削減されます。Parquet形式はカラムナストレージなのでカラムプルーニングの効果が特に高く、Delta LakeテーブルではさらにData Skipping(ファイルレベルの統計情報による除外)も適用されます。
Structured Streaming
問題 3
以下のStructured Streamingコードで、trigger(availableNow=True)を使用した場合の動作として正しいものはどれですか? (spark.readStream .format("cloudFiles") .option("cloudFiles.format", "json") .load("/data/events/") .writeStream .format("delta") .option("checkpointLocation", "/checkpoints/events") .trigger(availableNow=True) .toTable("bronze.events"))
正解: B
trigger(availableNow=True)は、チェックポイント以降の未処理データをすべて処理し、完了後にストリームを自動停止するトリガーモードです。trigger(once=True)と似ていますが、availableNowはデータを複数のマイクロバッチに分割して処理するため、大量の未処理ファイルがある場合でもメモリ不足を防げます。trigger(once=True)は全データを1つのマイクロバッチで処理するためCが該当します。availableNowはcloudFiles(Auto Loader)との組み合わせが特に推奨されており、バッチ的なスケジュール実行(例:毎朝1回Workflowで起動)でストリーミングの増分処理を活用するパターンに最適です。この使い分けはSpark Developer試験で頻出です。
コード問題の正答率を上げる最も効果的な方法は、自分でコードを書いて実行することです。Community Editionで小さなサンプルデータを作成し、select・filter・groupBy・join・withColumn・when/otherwise・ウィンドウ関数のコードを実際に書いて結果を確認しましょう。特にウィンドウ関数(rank・dense_rank・row_number・lag・lead)はpartitionByとorderByの組み合わせで結果が変わるため、手を動かして体感する必要があります。
Catalyst Optimizerの最適化を理解するには、df.explain(True)で論理計画(Parsed / Analyzed / Optimized)と物理計画(Physical Plan)を確認する習慣をつけましょう。述語プッシュダウンが適用されているか、ブロードキャストジョインが選択されているか、実行計画を読めるようになると最適化問題の正答率が大幅に上がります。
Spark UIのJobs・Stages・SQL/DataFrameタブの読み方を理解しておきましょう。タスクの処理時間分布(データスキューの検出)、シャッフル読み書きのサイズ、キャッシュヒット率、ステージ間のDAGなど、パフォーマンス問題の診断に関する出題があります。
Spark Developer試験のコード問題はPythonとScalaのどちらで出題されますか?
Spark Developer Associate試験はPython版(PySpark)とScala版から受験時に選択できます。問題構成・難易度・合格ラインは同じで、コード問題の言語のみが異なります。PySpark版は受験者数が多く学習リソースも豊富なため、特に実務での言語指定がなければPython版がおすすめです。なお、両方の言語に関する知識が同時に問われることはありません。
Spark Developer試験のコード問題はどのような形式で出題されますか?
コード問題は主に3パターンあります。(1)完成コードの出力結果を予測する問題(例:groupBy→agg→showの結果行数)、(2)空欄補完型(コードの一部が___になっており、正しいメソッド名・引数を選ぶ)、(3)エラー発見型(実行時にエラーになるコードを選ぶ)です。いずれもAPIの仕様を暗記するだけでなく、実行結果をイメージできる力が必要です。Community Editionで実際にコードを動かす練習が効果的です。
Spark Developer試験ではDelta Lakeの問題も出題されますか?
Delta Lakeの基本概念(ACIDトランザクション・Time Travel・スキーマ進化)とDataFrameReaderでのDelta形式の読み書きは出題範囲に含まれます。ただしData Engineer試験ほど深くは問われず、MERGEの複雑な条件分岐・DLT・LakeFlow・Unity Catalogの権限管理などはSpark Developer試験の出題範囲外です。Delta Lake関連はSpark Developer試験全体の約5〜8%程度の出題比率です。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Databricks資格一覧|全7試験・難易度・勉強法
Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...
Databricks試験の難易度ランキング|全7資格を徹底比較
Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...
Databricks資格の勉強方法|最短合格ルートと学習時間の目安
Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...
Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略
Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...
Databricks Data Engineer Professional完全解説|上級試験の攻略法
Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...