【PySpark入門】第1弾 PySparkとは?

記事タイトルとURLをコピーする

はじめに

こんにちは。孔子の80代目子孫兼ディベロップメントサービス課の孔です。暑い日々が続いてますね。最近スーパーでかき氷を作る機械(手動)を買いました、作るのも食べるのも楽しいので今年の夏はこれで乗り越えようと考えています。500円だったのでコスパがいいですね、幸せは遠くにあらずと、孔子が言ってた気がします。

最近PySparkを少し触っているので、自分が勉強しながらまとめていたものを共有したいと思い、このようにブログを書きました。PySparkの紹介から、実際どのように触るのかや、Sparkで使われるいろいろな概念などをご紹介できればと思います。最終目的は、AWS GlueなどAWS上でこのPySparkをどのように利用できるのかの紹介なので、道のりが長いです。まずは1回目として、「そもそもPySparkってなに?」に関する話をしてみたいと思います。それでは、始めましょう!

PySparkとは

Sparkとは

PySparkを知る前に、まずそもそもApache Spark(※1)(以下Spark)がどのようなものなのかがわかれば、PySparkも自然に理解できるかと思いますので、Sparkの紹介を先にやっておきたいと思います。

Sparkは一言でいうと「分散処理を用いて大容量のデータを分析するためのフレームワーク」です。大容量のデータを複数のノードに処理対象を分散させ、高速で処理させることを目的としたフレームワークとなります。Sparkの特徴としては以下のようなものがあげられます。

  • パフォーマンス:同じ分散処理基盤の大容量データ分析フレームワークHadoopより、最大100倍以上の処理が可能

  • 豊富なライブラリ:機械学習、SQL、ストリーミングデータ処理などができるライブラリを支援

  • 使いやすさ:複数の言語(Java, Python, R, Scala)をサポートしているため、使いやすい

先ほど話した「分散処理を用いて大容量のデータを分析するためのフレームワーク」ですが、「分散処理」「大容量」「分析」といえばApache Hadoop(※2)(以下Hadoop)もとてもよく使われていますが、SparkはHadoopより高パフォーマンスおよび使いやすいものを作ることを目的として開発されたものになります。よって上記のような特徴を持つようになりました。

それでは、それぞれの特徴をもう少し掘り下げ、よりSparkの理解を深めてみましょう。

パフォーマンス

なぜSparkはHadoopより100倍も速いでしょうか。それはSparkがRAM上でデータを処理するように設計されているためです。HadoopはMapReduce(※3)という処理方法でデータを処理します。MapReduceとは名前通り、データを「Key/Valueペアを生成(Map)してKeyごとにValueをまとめる(Reduce)」方法を指しています。

それぞれMapした結果とReduceした結果をディスクに保存し、取り出して処理をするHadoopは、どうしてもRAM上でデータをもって処理するSparkよりパフォーマンスが悪くなります。これがSparkが高速処理ができる秘訣となります。

ただし、逆に言うとこれは「処理するデータに対して十分なRAMを確保できること」が前提条件となります。数TBのデータを処理するためのRAMの確保は現実的に無理があります。なので、分散処理したノードのRAMで十分に処理できるデータ量もしくはメモリ上で処理した際に最大限のパフォーマンスを出せる処理(繰り返し処理など)はSparkを、そうでなければHadoopを考慮するのが望ましいです。

豊富なライブラリ

SparkにはSpark SQL、Spark Streaming、MLlib、GraphXなど豊富なライブラリが用意されています。それぞれのライブラリの特徴は以下のようになります。

  • Spark SQL:Sparkでデータ操作時に使用するデータセットオブジェクトをSQLで操作できる

  • Spark Streaming:ストリーミングデータの処理に特化した処理ができる

  • MLlib:機械学習用データの前処理が簡単にできる

  • GraphX:グラフのデータを分析した処理が簡単にできる

このようなライブラリを適切に利用することで、目的に合ったデータ分析用システムをより簡単に実装できるようになります。こちらのライブラリも、本シリーズで後ほど紹介します。

使いやすさ

SparkはJava、Python、R、Scala用のAPIを提供しています。データ分析においてよく使われるRや、世間一般でよく使われるJavaなどをサポートすることによって、言語の障壁なくSparkを使うことができます。

また、分散処理など、複雑な裏の挙動をいい感じに抽象化し、利用者が意識しなくてもSparkのメリットを十分享受できるように作られているので、手軽に開発ができるのもポイントになります。

それで、PySparkとは?

最後の「使いやすさ」で、SparkはPython用のAPIを提供していると記載しています。SparkはScalaで実装されていますが、それをPythonで実行できるようにSparkはPython用のAPIを提供しています。このAPIのことをPySparkといいます。つまり、「PythonでSparkを利用するためのAPI」です。

PythonでSparkを利用するメリットは複数ありますが、その中でいくつかを上げますと

  • 低い学習コストおよび運用コスト

  • データの可視化が容易

  • Pythonの豊富なライブラリと融合してより強力なアプリケーション実装可能(機械学習など)

  • Jupyterが使える!!!

などがあります。Sparkを利用する際に複数の選択肢がありますが、すでにPythonを知っていて、既存のPythonコードにSparkの機能をお借りしたり、Pythonのライブラリと融合したアプリケーションを作成する際にはPySparkはとてもいい選択肢になれるかと思います。

最後に

今回はPySparkがどのようなものなのかについて話してみました。次回は実際どのようにPySparkを使うための環境を作るのか、そして簡単にどのように動かせるのかについてご説明いたします。それでは、またお会いしましょう!

参考サイト

孔 允培 (執筆記事の一覧)

アプリケーションサービス部 ディベロップメントサービス課

孔子の80代目子孫