2023年にリリースされたApache Spark 3.4と3.5で、私たちはPySparkのパフォーマンス、柔軟性、使いやすさの改善に重点を置きました。 このブログ記事では、主な改善点をご紹介します。
2023年にApache Spark 3.4と3.5で追加された最も重要な機能の概要です:
- Spark Connectは、任意のアプリケーションからSparkクラスタへのリモート接続を可能にする、クライアントとサーバーを分離したアーキテクチャを導入しています。 これにより、サービスとしてのSparkは、安定性、アップグレード可能性、可観測性を高めながら実現されます。
- Arrowに最適化されたPythonユーザー定義関数(UDF)では、Arrowのカラムナーフォーマットを活用することで、通常のPython UDFの2倍のパフォーマンスを実現し、飛躍的な効率の向上を示しました。
- Pythonのユーザー定義テーブル関数(UDTF)により、ユーザーはPySparkでネイティブにテーブルベースの変換を実行できるようになりました。
- GROUP BY ALLやORDER BY ALLなどのSpark SQLの新機能が導入されました。これらはすべてPySparkからネイティブに使用できます。
- Pythonの任意のステートフル処理は、ストリーミングクエリで任意の状態を維持する機能を提供します。
- TorchDistributorは、Apache Sparkクラスタ上でのPyTorchの分散学習をサポートします。
- 新しいテスト用APIは、PySparkアプリケーションの効果的なテストを可能にし、開発者が高品質なコードを作成できるようにします。
- English SDKは、平易な英語による指示をPySparkやSQLに変換し、開発者の生産性を向上させる、LLMを利用したプログラミングへのアプローチです。
次のセクションでは、これらの各項目について検証し、さらに注目すべき改善点をいくつかご紹介します。
Apache Spark 3.5と3.4:機能ディープダイブ
Spark Connect:Apache Sparkのリモート接続
Spark ConnectはApache Spark 3.4でデビューし、クライアントとサーバーを分離したアーキテクチャを導入することで、任意の場所で実行されているアプリケーションからSparkクラスタへのリモート接続を可能にしました。 このようにクライアントとサーバーを分離することで、最新のデータアプリケーショ ン、IDE、ノートブック、プログラミング言語がインタラクティブにSparkにアクセスできるようになります。 さらに、非結合アーキテクチャにより、安定性、アップグレード性、デバッグ性、可観測性が向上します。
Apache Spark 3.5ではScalaのサポートが完了し、Structured Streaming (SPARK-42938)、ML と PyTorch (SPARK-42471)、Pandas API on Spark (SPARK-42497) などの主要な Spark コンポーネントのサポートも完了しました。
Databricks Connectを使用してDatabricks上のSpark ConnectまたはApache Spark用のSpark Connectを直接開始します。
Arrow最適化Python UDF:Python UDFのパフォーマンス向上
Arrow-optimized Python UDFs (SPARK-40307)は、Arrowのカラムナーフォーマットを活用することで、パフォーマンスの大幅な最適化を可能にします。 例えば、同じクラスタ内でUDFを連鎖させた場合、32GBのデータセットでArrow最適化Python UDFはpickle Python UDFよりも1.9倍高速に実行されます。
Python UDTFs
Apache Spark 3.5では、PySparkのUDFサポートをユーザー定義テーブル関数で拡張しました。 一度登録されると、SQLクエリのFROM句に表示することができます。 例えば、以下のUDTF SquareNumbers は
、入力とその2乗値を表として出力します:
SQLの新機能
PySparkの大きな利点の1つは、Spark SQLがPySpark DataFramesとシームレスに動作することです。 2023年にSpark SQLは多くの新機能を導入し、PySparkはspark.sqlを介して
、GROUP BY ALL および ORDER BY ALL、
一般的なテーブル値関数のサポート、INSERT BY NAME、PIVOT
およびMELT
、ANSI コンプライアンスなどを直接活用できるようになりました。 以下はGROUP BY ALLと
ORDER BY ALLの
使用例です:
Pythonによる任意のステートフル処理
Structured StreamingにおけるPythonの任意のステートフル操作は、ストリーミングクエリの実行にまたがるステート処理を可能にすることで、PySparkにおける膨大な数のリアルタイム分析や機械学習のユースケースの障害を取り除きます。 次の例は、任意のステートフル処理を示しています:
TorchDistributor:PyTorchのネイティブ統合
TorchDistributorはPySparkでPyTorchのネイティブサポートを提供し、Sparkクラスタ上でのディープラーニングモデルの分散学習を可能にします。 PyTorchのプロセスを開始し、配布の仕組みはPyTorchに任せ、プロセスが調整されていることを確認するためだけに機能します。
TorchDistributorの使い方は簡単で、いくつかの主な設定があります:
テストAPI:PySpark DataFramesのテストがより簡単に
pyspark.testing
パッケージの新しいテスト API (SPARK-44042) は、PySpark アプリケーションをテストする開発者に大きな機能拡張をもたらします。詳細なエラーメッセージを含む、等式テストのためのユーティリティ関数を提供し、DataFrameスキーマとデータの不一致の特定を容易にします。 下の出力例はそれを示しています:
English SDK:プログラミング言語としての英語
English SDK for Apache Sparkは、ユーザーが平易な英語で指示を入力し、それをPySparkとSpark SQLのコードに変換することで、Apache Sparkの使用を簡素化します。 これにより、特にDataFrameの変換操作、データの取り込み、UDFに関連するコードでPySparkプログラミングがより身近になり、キャッシュのおかげで生産性がさらに向上します。 English SDKは、開発プロセスを合理化し、コードの複雑さを最小限に抑え、Sparkコミュニティの裾野を広げる大きな可能性を秘めています。 ご自身で試してみてください!
その他の注目すべき改善点
Apache Spark 3.4と3.5で導入されたその他の機能のうち、まだご存知でなければ調べてみると良いでしょう:
- PySparkによるパラメータ化クエリ
- SQL関数のパリティ: スケッチベースの近似識別カウントを 含む150の新関数 (SPARK-43907)
- 横列エイリアス対応
- 重複排除を容易にするために透かし内の重複を削除 (SPARK-42931)
- ディープスピード ディストリビューター
- 高度なジョブキャンセルAPI (SPARK-44194)
- Python メモリプロファイラ
- IPythonにおける自動補完の改善 (SPARK-43892)
- ドキュメントの改善 (SPARK-42374、SPARK-42493、SPARK-42642)
振り返りと今後
2023年、オープンソースコミュニティの活発なイノベーションにより、PySparkとApache Sparkの両方が大幅に強化され、データ専門家が利用できるツールキットの幅が広がり、分析ワークフローが合理化されました。 Apache Spark 4.0の登場を目前に控え、PySparkは新機能と性能の向上を通じてデータ処理にさらなる革命を起こす態勢を整え、データエンジニアリングとデータサイエンスのコミュニティにおけるデータ分析の推進へのコミットメントを再確認しています。
新機能のご紹介
この投稿では、PySparkの使いやすさ、パフォーマンス、柔軟性を強化するために2023年にApache Spark 3.4と3.5で行われた最も重要な改善の概要を簡単に説明しました。 これらの機能はすべてDatabricks Runtime 13および14で利用可能です。