メインコンテンツまでスキップ

Databricks 上の PySpark

Databricksは、ビッグデータと機械学習向けの統合分析エンジンであるApache Sparkの上に構築されています。PySpark は、学習、実装、保守が容易な柔軟な言語である Python プログラミング言語を使用して Apache Spark とやり取りするのに役立ちます。 また、Databricks で データを視覚化 するための多くのオプションも提供します。 PySpark は、Python と Apache Spark のパワーを組み合わせたものです。

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

Spark の概念の概要

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

データフレーム

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

重要な データフレーム 要素には、次のようなものがあります。

  • スキーマ : スキーマは、データフレーム の列名と型を定義します。 データ形式には、スキーマの定義と適用のための異なるセマンティクスがあります。 一部のデータソースはスキーマ情報を提供しますが、他のデータソースは手動のスキーマ定義に依存するか、スキーマ推論を許可します。 スキーマは、ユーザーが手動で定義することも、データソースから読み取ることもできます。
  • : Spark は、データフレーム 内のレコードを Row オブジェクトとして表します。 Delta Lake などの基になるデータ形式では列を使用してデータを格納しますが、最適化のために Spark は行を使用してデータをキャッシュおよびシャッフルします。
  • : Spark の列はスプレッドシートの列に似ており、文字列や整数などの単純な型だけでなく、配列、マップ、null などの複雑な型も表すことができます。 データソースの列を選択、操作、または削除するクエリを記述できます。 可能なデータソースには、テーブル、ビュー、ファイル、またはその他の データフレームが含まれます。 列はデータセットや データフレーム から削除されることはなく、 .drop 変換や select ステートメントの省略によって結果から省略されるだけです。

データ処理

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

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

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

注記

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

アクション : アクションは、 Spark に 1 つ以上の データフレームに対する一連の変換の結果をまとめるように指示します。 アクション操作は値を返し、次のいずれかになります。

  • display や、コンソールまたはエディターにデータを出力するアクション show
  • データを収集する( Row オブジェクトを返す)アクション( take(n)first 、または head
  • データソースに書き込むアクション ( saveAsTable
  • 計算をトリガーする集計 (例: count
important

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

データフレームが不変とはどういう意味ですか?

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

APIとライブラリ

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

  • Spark SQLおよびデータフレーム を使用したリレーショナルクエリによる構造化データの処理。Spark SQL を使用すると、SQL クエリと Spark プログラムを混在させることができます。 Spark データフレームを使用すると、PythonとSQLを使用してデータの読み取り、書き込み、変換、分析を効率的に行うことができるため、常にSparkのパワーをフルに活用できます。 PySpark スタートガイドを参照してください。
  • 構造化ストリーミング によるストリームのスケーラブルな処理。ストリーミング計算は、静的データに対するバッチ計算を表現するのと同じ方法で表現でき、ストリーミング データが到着し続けると、Spark SQL エンジンはそれを段階的かつ継続的に実行します。 構造化ストリーミングの概要を参照してください。
  • Pandas API on Spark を用いたApache Sparkで動作するPandasデータ構造とデータ分析ツール。 Pandas API on Spark では、Pandas (テスト、小規模なデータセット) やSpark (本番運用、分散データセット)で動作する単一のコードベースを使用して、複数のノードに分散して実行することで、Pandasワークロードを任意のサイズにスケーリングできます。Pandas API on Sparkの概要を参照してください。
  • 機械学習による機械学習アルゴリズム (MLlib) は、ユーザーが実用的な機械学習パイプラインを作成および調整するのに役立つ統一されたMLlib セットを提供する、 上に構築されたスケーラブルな機械学習ライブラリです。SparkAPIs機械学習ライブラリの概要を参照してください。
  • GraphX によるグラフとグラフ並列計算。GraphX では、各頂点とエッジにアタッチされたプロパティを持つ新しい有向多重グラフを導入し、グラフ計算演算子、アルゴリズム、およびビルダーを公開してグラフ分析タスクを簡略化します。 GraphX の概要を参照してください。

Spark チュートリアル

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

Apache Spark のドキュメントには、次のような Spark の学習に関するクイックスタートとガイドもあります。

PySpark リファレンス

Databricks は、次のセクションにある独自のバージョンの PySpark APIs と対応する参照を保持しています。