Databricks

Databricks Photon engine 徹底理解:高速化・対応ワークロード・制約

2026-03-21
更新: 2026-03-27
NicheeLab編集部

Photonは、DatabricksがApache Sparkの実行レイヤーをC++でゼロから再実装したネイティブベクトル化エンジンです。 従来のJVMベースのSpark実行エンジンと互換性を保ちつつ、CPU命令レベルの最適化(SIMD、列指向バッチ処理)により 特にSQLクエリ・DataFrame操作・Delta Lake I/Oで大幅な高速化を実現します。

本記事では、Photonの対応・非対応ワークロード、JVMへの自動フォールバック挙動、有効化方法、 Classic/Photon/Serverlessのコスト比較を整理します。

Photonのアーキテクチャ:なぜ速いのか

従来のSparkはJVM上でJavaバイトコードとして実行されます。Photonはこの実行レイヤーをC++で置き換え、以下の最適化を行います。

  • 列指向バッチ処理:行単位ではなくカラム単位でデータをメモリに配置し、CPUキャッシュ効率を最大化
  • SIMD命令の活用:1命令で複数のデータポイントを同時処理(Single Instruction, Multiple Data)
  • コード生成の排除:JVM Whole-Stage Code Generationの代わりに事前コンパイル済みのC++コードを使用
  • メモリ管理の最適化:JVMのGC(ガベージコレクション)を回避し、メモリ割り当てを直接制御

これらの最適化により、Photonは特にCPU律速のワークロード(大量のJOIN、集約、ソート、フィルタリング)で 従来のSparkエンジンに対して2〜8倍程度の高速化を実現する場合があります。

対応ワークロード

Photonは以下のワークロードで高速化効果を発揮します。Spark SQLおよびDataFrame APIの多くの操作がPhoton対象です。

ワークロードPhoton対応備考
Spark SQL(SELECT/JOIN/WHERE/GROUP BY)対応最も高速化効果が大きい領域
DataFrame API(filter/groupBy/join/agg)対応SQLと同等の最適化が適用
Delta Lake読み取り(Scan)対応Parquetデコードの高速化
Delta Lake書き込み(INSERT/MERGE/UPDATE/DELETE)対応書き込みパスもPhotonで処理
Parquetファイル読み書き対応ネイティブParquetリーダー
JOIN(Hash Join / Sort Merge Join)対応大規模JOINで顕著な効果
集約(SUM/COUNT/AVG/MIN/MAX)対応ベクトル化により高速
ソート(ORDER BY)対応大規模データのソートに効果的
ウィンドウ関数対応ROW_NUMBER, RANK等
Structured Streaming(マイクロバッチ)対応バッチ処理部分がPhotonで高速化

非対応ワークロード

以下のワークロードはPhotonで実行されず、自動的にJVMベースのSparkエンジンにフォールバックします。 Photonが有効な環境でも、これらの処理はクラシックSparkとして動作します。

ワークロードPhoton対応理由・備考
RDD API非対応低レベルAPIはPhotonの最適化対象外
Python UDF(通常のUDF)非対応Pythonプロセスで実行されるためC++エンジン外
Scala/Java UDF非対応JVMで実行されるカスタムコードはPhoton対象外
Pandas UDF(Arrow最適化UDF)非対応Pythonプロセスでの実行
Structured Streaming 状態処理(mapGroupsWithState等)非対応カスタム状態管理はJVM側で処理
MLlib / SparkML非対応ML特化の処理パスはPhoton外
GraphX非対応グラフ処理はJVM実行
CSV/JSONファイルの読み取り(一部)部分対応ParquetやDeltaほどの効果はない

フォールバック挙動:非対応時の自動切り替え

Photonが有効なクラスタで非対応のオペレーションを実行した場合、エラーにはなりません。 該当オペレーションだけが自動的にJVMベースのSparkエンジンにフォールバックし、残りのPhoton対応オペレーションはPhotonで実行されます。

# 例:Photon対応クラスタでUDFを含むクエリを実行
from pyspark.sql.functions import udf
from pyspark.sql.types import StringType

# このUDFはJVMフォールバックで実行される
@udf(returnType=StringType())
def custom_transform(value):
    return value.upper() + "_PROCESSED"

# filterとgroupByはPhotonで実行、UDF部分のみJVMで実行
result = (
    spark.read.format("delta").load("/mnt/silver/orders")
    .filter("amount > 100")                    # Photon
    .withColumn("label", custom_transform("region"))  # JVM fallback
    .groupBy("label").sum("amount")            # Photon
)
result.display()

クエリ実行計画をSpark UIで確認すると、Photonで実行されたオペレータには「Photon」プレフィックス(PhotonScan、PhotonHashAggregateなど)が表示されます。 プレフィックスがないオペレータはJVMフォールバックしていると判断できます。

Photonの有効化方法

Photonは以下のいずれかの方法で有効化できます。クラスタ作成時に設定するのが最も一般的です。

  • クラスタ作成時にPhoton対応のDatabricks Runtime(例: 15.4 LTS Photon)を選択
  • Cluster Policyでphoton_enabledをtrueに強制する
  • REST API / CLIでクラスタ設定にruntime_engine: PHOTONを指定
// Cluster Policy でPhotonを強制する例
{
  "runtime_engine": {
    "type": "fixed",
    "value": "PHOTON"
  },
  "spark_version": {
    "type": "regex",
    "pattern": "15\\.4\\.x-photon-scala.*",
    "defaultValue": "15.4.x-photon-scala2.12"
  }
}

Serverless SQL Warehouseでは、Photonがデフォルトで有効です。追加設定なしにPhotonの高速化が適用されます。

Classic vs Photon vs Serverlessの料金比較

Photonの導入判断にはDBU単価と処理時間の両方を考慮する必要があります。 以下は各コンピュートオプションのコスト特性の概要です(実際の単価はクラウドプロバイダやリージョンにより異なります)。

コンピュートタイプDBU単価処理速度総コスト傾向適したユースケース
Classic Runtime(JVM)基準基準処理時間が長いと高額化UDF多用、RDD処理、ML
Photon RuntimeClassicより高い2〜8倍高速(対応ワークロード)高速化で総DBU削減の可能性SQL/DataFrame中心のETL、大規模JOIN・集約
Serverless SQL Warehouse最も高いPhoton + 即時起動待機コストゼロ + 高単価BIクエリ、ダッシュボード、アドホック分析

Photonの費用対効果を見るには、同一ワークロードをClassicとPhotonで実行し、実行時間とDBU消費量を比較するのが確実です。 JOIN・集約・ソートが中心のETLジョブでは、Photonの単価上昇を処理時間短縮が上回ることが一般的です。

パフォーマンス最大化のベストプラクティス

  • カスタムUDFをSpark組み込み関数に書き換える(UDFはJVMフォールバックするため)
  • RDD APIをDataFrame APIに移行する(RDDはPhoton非対応)
  • Delta Lake形式で保存する(Parquetの最適化されたPhotonリーダーが使える)
  • データスキッピング(Z-ORDER / Liquid Clustering)と組み合わせてI/O削減する
  • 小さなファイルを統合する(OPTIMIZE)ことでScan効率を上げる

試験で問われるポイント

  • PhotonがC++実装のベクトル化エンジンであること(JVMではない)
  • RDDとカスタムUDFがPhoton非対応であること
  • 非対応オペレーションはエラーではなくJVMフォールバックすること
  • PhotonとServerlessの違い(Serverless = Photon + マネージドコンピュート + 即時起動)
  • DBU単価はClassic < Photon < Serverlessだが、総コストは処理時間次第であること

問題で確認

Data Engineer Associate

問題 1

Photon対応のDatabricks Runtimeを使用しているクラスタで、PythonのカスタムUDFを含むSpark SQLクエリを実行した。この場合の動作として正しいものはどれか。

  1. クエリ全体がPhotonで実行され、UDFも高速化される
  2. UDFがPhoton非対応のためクエリ全体がエラーになる
  3. UDF部分はJVMエンジンにフォールバックし、それ以外のPhoton対応オペレーションはPhotonで実行される
  4. Photonが無効化され、クエリ全体がClassic JVMエンジンで実行される

正解: C

Photonは非対応オペレーション(カスタムUDF含む)を検出すると、そのオペレーションだけをJVMベースのSparkエンジンにフォールバックします。クエリ全体がエラーになることはなく、Photon対応の他のオペレーション(filter、groupBy、JOINなど)はPhotonで実行されます。

よくある質問

PhotonはカスタムUDFを高速化できますか?

いいえ、PhotonはC++で実装されたベクトル化エンジンであり、PythonやScalaで書かれたカスタムUDFはPhotonでは実行されません。UDFの処理は自動的にJVMベースのSparkエンジンにフォールバックします。UDFをPhotonの恩恵に変えたい場合は、可能な限りSpark SQLの組み込み関数やDataFrame APIに書き換えることを推奨します。

Photonを有効にするとコストは増えますか?

Photon対応のDBR(Databricks Runtime)を使うと、1 DBUあたりの単価がClassicより高くなります。ただしPhotonによりクエリ実行時間が大幅に短縮されると、総DBU消費量が減り結果的にコスト削減になるケースが多いです。特にJOIN・集約・ソートが多いワークロードでは、Photonの単価上昇を性能向上が上回ることが一般的です。

Photonが効かないクエリをどう見分けますか?

Spark UIのクエリ実行計画で、各オペレータに「Photon」プレフィックスが付いているかで確認できます。PhotonScan、PhotonGroupingAggなどが表示されればPhotonで実行されています。プレフィックスがないオペレータはJVMフォールバックしています。また、spark.databricks.photon.allDataSources.enabledなどの設定でPhoton適用範囲を制御できます。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Databricks

Databricks資格一覧|全7試験・難易度・勉強法

Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...

Databricks

Databricks試験の難易度ランキング|全7資格を徹底比較

Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...

Databricks

Databricks資格の勉強方法|最短合格ルートと学習時間の目安

Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...

Databricks

Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略

Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...

Databricks

Databricks Data Engineer Professional完全解説|上級試験の攻略法

Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...

Databricksの記事一覧 (105件)
© 2026 NicheeLab All rights reserved.