PySparkの概念と主な機能
PySparkとは
PySparkは、リアルタイムの大規模データ処理のためのオープンソース分散コンピューティングフレームワークおよびライブラリ群であるApache Spark向けのPython APIである。PythonやPandasのようなライブラリにすでに慣れているなら、PySparkはよりスケーラブルな分析とパイプラインを作る方法を学ぶのに適した言語である。
Apache Sparkは基本的に、並列およびバッチシステムで処理することで巨大なデータセットを扱う計算エンジンである。SparkはScalaで書かれており、PySparkはSparkとPythonの連携をサポートするためにリリースされた。Spark用APIを提供するだけでなく、PySparkはPy4Jライブラリを活用してRDD(Resilient Distributed Datasets)とのインターフェースをサポートする。

PySparkで使用される主なデータ型はSpark DataFrameである。このオブジェクトはクラスター全体に分散されたテーブルと考えることができ、RやPandasのデータフレームと似た機能を持つ。PySparkを使用して分散計算を行うには、他のPythonデータ型ではなくSpark DataFrame上で操作を実行する必要がある。
PandasとSpark DataFrameの主な違いの1つは、即時実行と遅延実行である。PySparkでは、結果がパイプラインで実際に要求されるまで操作が遅延される。例えば、Amazon S3からデータセットをロードし、DataFrameに複数の変換を適用する処理を指定できるが、これらの操作はすぐには適用されない。代わりに変換グラフが記録され、データが実際に必要になったとき、例えば結果をS3へ書き戻すときに、変換が単一のパイプラインジョブとして適用される。このアプローチは、DataFrame全体をメモリへ取り込むことを防ぎ、システムクラスター全体でより効果的な処理を可能にするために使われる。Pandas DataFrameを使用すると、すべてをメモリに取り込み、すべてのPandas操作が即座に適用される。
PySparkの機能とライブラリ
Py4JはPySpark内に統合されている広く使われるライブラリで、PythonがJVM(Java Virtual Machine)オブジェクトと動的にインターフェースできるようにする。PySparkは効率的なプログラム作成のために多くのライブラリを提供する。また、以下を含む互換性のあるさまざまな外部ライブラリがある。
PySparkSQL
PySparkSQLは、大容量の構造化または半構造化データにSQLに似た分析を適用するPySparkライブラリである。PySparkSQLとともにSQLクエリを使用することもできる。
MLlib
MLlibは、PySparkおよびSparkのラッパー機械学習(ML)ライブラリである。MLlibは分類、回帰、クラスタリング、協調フィルタリング、次元削減、基本的な最適化プリミティブのための多くの機械学習アルゴリズムをサポートする。
GraphFrames
GraphFramesは、PySpark CoreおよびPySparkSQLを使用してグラフ分析を効率的に実行するための一連のAPIを提供するグラフ処理ライブラリである。高速な分散コンピューティングに最適化されている。
まとめ
Pythonは知っているがScalaは知らないデータエンジニアにとって、PySparkは純粋なSparkよりはるかに使いやすいが、欠点もある。PySparkのエラーはJavaのスタックトレースエラーとPythonコードへの参照の両方を表示するため、PySparkアプリケーションのデバッグは非常に難しい場合がある。
Sparkは他のデータ処理オプションより多くの処理オーバーヘッドと複雑な設定を含む。RayとDaskが最近登場した。Daskは純粋なPythonフレームワークであるため、ほとんどのデータエンジニアはすぐにDaskを使用できる。