Databricks 上の PySpark

Databricks は、ビッグデータと機械学習のための統合アナリティクス エンジンである Apache Spark の上に構築されています。PySpark は、学習、実装、保守が容易な柔軟な言語である Python プログラミング言語を使用して Apache Spark とインターフェースするのに役立ちます。 また、Databricks でのデータビジュアライゼーションのための多くのオプションも提供します。 PySpark は Python と Apache Spark のパワーを組み合わせたものです。

この記事では、Databricks 上の PySpark の基礎について概要を説明します。

Spark の概念の紹介

PySpark の使用を開始する前に、Apache Spark の主要な概念を理解することが重要です。

DataFrames

DataFrames は Apache Spark の主要オブジェクトです。 DataFrame は、名前付きの列に編成されたデータセットです。 DataFrame は、スプレッドシートや SQL テーブルのように、一連のレコード (テーブル内の行に類似) とさまざまなタイプの列からなる 2 次元のラベル付きデータ構造であると考えることができます。 DataFrames は、一般的なデータ操作および分析タスクを効率的に実行できる豊富な関数セット (列の選択、フィルター、結合、集計など) を提供します。

重要な DataFrame 要素には次のようなものがあります。

  • スキーマ: スキーマは、DataFrame の列名と型を定義します。 データ形式には、スキーマの定義と適用に関するさまざまなセマンティクスがあります。 一部のデータソースはスキーマ情報を提供しますが、他のデータソースは手動のスキーマ定義に依存するか、スキーマ推論を許可します。 ユーザーはスキーマを手動で定義することも、データソースからスキーマを読み取ることもできます。

  • : Spark は DataFrame 内のレコードをRowオブジェクトとして表します。 Delta Lake などの基盤となるデータ形式では列を使用してデータを格納しますが、最適化のために Spark は行を使用してデータをキャッシュおよびシャッフルします。

  • : Spark の列はスプレッドシートの列に似ており、文字列や整数などの単純な型を表すことができますが、配列、マップ、null などの複雑な型を表すこともできます。 データソースから列を選択、操作、または削除するクエリを作成できます。 可能なデータソースには、テーブル、ビュー、ファイル、またはその他のDataFramesが含まれます。 列はデータセットまたは DataFrame から削除されることはなく、 .drop変換またはselectステートメントの省略によって結果から省略されるだけです。

データ処理

Apache Spark は、遅延評価を使用して、DataFrames で定義された変換とアクションを処理します。 これらの概念は、Spark を使用したデータ処理を理解するための基礎となります。

変換: Sparkでは、処理ロジックを変換として表現します。変換は、 DataFramesを使用してデータをロードおよび操作するための命令です。 一般的な変換には、データの読み取り、結合、集計、型キャストなどがあります。 Databricksでの変換の詳細については、 「データの変換」を参照してください。

遅延評価: Spark は、変換によって指定されたロジックを評価するための最も効率的な物理プランを識別することで、データ処理を最適化します。 ただし、Spark はアクションが呼び出されるまで変換を実行しません。 Spark は、指定された順序どおりに各変換を評価するのではなく、アクションがすべての変換の計算をトリガーするまで待機します。 これは遅延評価または遅延読み込みと呼ばれ、Spark は操作が定義されたときにすぐに実行するのではなく、遅延して実行を処理するため、複数の操作を連鎖させることができます。

注:

遅延評価とは、 DataFrames論理クエリをメモリ内の結果ではなく、データソースに対する一連の命令として保存することを意味します。 これは、 Pandas DataFramesで使用されるモデルである Eager 実行とは大きく異なります。

アクション :Spark アクションは、1 つ以上の に対する一連の変換の結果を取得するようにDataFrames に指示します。アクション操作は値を返し、次のいずれかになります。

  • コンソールまたはエディタでデータを出力するアクション ( displayshow

  • データを収集するアクション (オブジェクト Row を返す) ( take(n)first など) head

  • データソースに書き込むアクション、例: saveAsTable

  • 計算をトリガーする集計 ( count

重要

本番運用データパイプラインでは、通常、データの書き込みのみが存在するアクションになります。 他のすべてのアクションはクエリの最適化を中断し、ボトルネックにつながる可能性があります。

DataFramesが不変であるというのはどういう意味ですか?

DataFrames 、1 つ以上のデータソースに対して定義された変換とアクションのコレクションですが、最終的にはApache Sparkクエリを元のデータソースに戻すため、データ自体は変更されず、 DataFramesも変更されません。 つまり、 DataFramesは不変です。 このため、変換を実行した後、後続の操作でアクセスできるように変数に保存する必要がある新しい DataFrame が返されます。 変換の中間ステップを評価する場合は、アクションを呼び出します。

API とライブラリ

Spark の全ての API と同様に、 PySpark には次のような強力な機能を有効にしてサポートする多くの APIとライブラリが搭載されています。

  • Spark SQL と DataFrameを使用したリレーショナルクエリによる構造化データの処理。 Spark SQL を使用すると、SQL クエリと Spark プログラムを混在させることができます。 Spark DataFrame を使用すると、Python と SQL を使用してデータを効率的に読み取り、書き込み、変換、分析できるため、常に Spark のパワーを最大限に活用できます。 PySpark を始めるを参照してください。

  • 構造化ストリーミングによるスケーラブルなストリーム処理。 ストリーミング処理は、静的データに対するバッチ処理と同じ方法で表現でき、Spark SQL エンジンはストリーミングデータが到着し続けるにつれてそれを増分的かつ継続的に実行します。 構造化ストリーミングの概要を参照してください。

  • Pandas API on Spark を使用して Apache Spark で動作する Pandas データ構造とデータ分析ツール。 Pandas API on Spark を使用すると、Pandas (テスト、小規模なデータセット) と Spark (本番、分散データセット) で動作する単一のコードベースを使用して、複数のノードに分散された Pandas ワークロードを任意のサイズに拡張できます。Pandas API on Spark の概要を参照してください。

  • Machine Learning (MLlib) を使用した機械学習アルゴリズム。 MLlib は Spark上に構築されたスケーラブルな機械学習ライブラリであり、ユーザーが実用的な機械学習パイプラインを作成および調整するのに役立つ統一されたAPI のセットを提供します。 機械学習ライブラリの概要を参照してください。

  • GraphXを使用したグラフとグラフ並列計算。 GraphX は、各頂点と辺にプロパティが付加された新しい有向マルチグラフを導入し、グラフ計算演算子、アルゴリズム、ビルダーを公開してグラフ分析タスクを簡素化します。 GraphX の概要を参照してください。

Spark チュートリアル

Databricks 上の PySpark の使用例については、次の記事を参照してください。

Apache Spark のドキュメントには、次のような Spark を学習するためのクイックスタートとガイドも含まれています。

PySpark リファレンス

Databricks独自のバージョンのPySpark APIsと対応するリファレンスを維持しており、次のセクションにあります。