[書評]Applied Data Science Using PySpark を読んだ

データサイエンス
Applied Data Science Using PySpark: Learn the End-to-End Predictive Model-Building Cycle. Kakarla et al.

PySparkを使って学ぶデータサイエンスの入門書

今回は Applied Data Science Using PySpark: Learn the End-to-End Predictive Model-Building Cycle を読んだので、それについて見所や感想などをまとめたいと思います。
初めて読んだ洋書でかなり歯応えがありました。

※注意!!: かよしいは英語が苦手です。[1]TOEIC545点です。この業界にいながら、恥ずかしい… 自分が理解できる単語や図、プログラムのコードを読んで解釈をしているところが多々あるため、その点をご念頭においてください。

読もうと思った背景、期待したこと

僕の普段の業務では、1台のPCではとても処理し切れない膨大なサイズのデータを扱うことが頻繁にあります。
そのような時の対処方法の一つに、Sparkのような分散処理のフレームワークを使うことがあります。
中でも、PySparkはデータサイエンスの分野で馴染み深いPythonを使って処理を記述することができ、すでにPythonを習熟している人にとっては非常に扱いやすいフレームワークです。

そこで今回は、以下のようなことを学べることを期待して本書を手に取ってみました。

Sparkの概念についての理解を深める

PySparkは「Pythonで操作することができるSparkフレームワーク」という認識です。
Pythonは 完全に理解している[2]プログラマ業界のミーム。ダニング=クルーガー効果で検索してください。 のですが、Sparkについては本当の意味で全然理解できていないので、その理解を深めたいと思いました。

PySparkを用いたデータ処理のベストプラクティスを知る

PySparkを用いたデータ整形、機械学習モデリング、機械学習モデルの運用などのベストプラクティスを知りたいと思いました。
特に、素朴に扱うとSparkでも手に余るような非常に大規模なデータを扱う際のベストプラクティスがあるととても嬉しいなと思っていました。

勉強になったこと、面白かったこと

PySparkで登場する概念や機能についてのわかりやすい表がある

Chapter2 にて、PySparkの基礎としてSparkの説明などが簡単に紹介されていました。
正直なところ、Sparkの公式ページにある以上の情報は載っていなかったのですが、本書ではさまざまなことがわかりやすい表で整理されており、比較が容易で理解しやすかったです。

例えば、Sparkで登場するデータ構造であるRDD, DataFrame, Datasetの比較、Sparkのデータ型一覧、Sparkで重要な概念であるStorage Level(データをどのストレージに載せるか。適切に設定することでパフォーマンスが向上する)の比較表などが非常にわかりやすくまとまっていました。

基本的な操作がよくまとまっている

典型的なデータ処理で頻出する以下のような処理について、PySparkによるコードのサンプルがまとまっていました。
コードレシピとして使える内容かなと思います。(ただし、普段よく参照している こちらのサイト[3]Learning Apache Spark with Python の方が便利だなぁと思ったり…)

  • 統計量や欠損値の数の集計
  • カラムのリネームやキャスト
  • 条件によるデータの絞り込み、クレンジング
  • 別テーブルとのJoin

PySparkを用いたAutoMLパイプラインの実装がある

個人的に一番面白かった内容です。
本書の中では、PySparkによる基本的なデータ処理から始まり、特徴量の前処理、基本的な機械学習アルゴリズムの実施方法などが紹介されているのですが、Chapter8 ではそれまで学んできた処理を用いて、AutoMLパイプラインを実装しています。

このパイプラインでは、データのクレンジング、選択、前処理、機械学習モデリング、評価という一連のモデリング作業を自動で実施できます。特徴量の候補となるような生データとラベルデータを用意して与えるだけで動くので、「とりあえず試してみる」ようなケースに良いのではないかと思いました。
このパイプラインはコードだけで30ページ以上を使っていたので、書籍から写経するのは非常に辛いですが… (電子版買えばよかった…)

MLflowを用いた実験管理やstreamlitへのモデルデプロイの紹介がある

これも個人的に大変面白かったです。

機械学習モデルを用いたシステムの運用コストを下げるための体制を作ろう!(MLOps)ということがよく言われる昨今で、本書はそれに関わる内容もカバーしていました。
中でも、実験管理のデファクトスタンダードになりつつあるMLflowを用いた実験管理方法や、機械学習モデルアプリケーションを爆速で構築するためのモダンなライブラリであるstreamlitを用いたプロトタイプ作成に関する記述があり、大変面白かったです。

環境構築さえできれば、実際の業務にも適用できそうだなと思う内容でした。

残念だったこと

本書で出てきたPySparkの操作の多くで、「Pandas DataFrameに変換してから、Pandasの機能を使って処理する」というアプローチが取られていました。
Pandas DataFrameに変換するためには、分散させていたデータを一つのdriverノードに集約することになります。[4]https://spark.apache.org/docs/2.4.5/api/python/pyspark.sql.html#pyspark.sql.DataFrame.toPandas
一つのマシンで扱うのが難しい大規模なデータを扱うためにPySparkを用いているのに、これでは使う意味がないなと、率直に感じてしまいました。

Pandasへの変換は最終手段として、できる限りPySparkで実現できる処理のみのコード例を求めていたので、そういう意味では残念でした。

その他感想

各Chapterで、機械学習モデリングに関する知識について書かれていました。
例えば回帰,分類のモデルに用いられる損失関数の種類とその定式化、どのようなケースでその損失関数を使うべきか、などです。

そのような知識について学びたい場合は、わざわざ本書を選ぶのではなく別の本を選ぶ方がよりわかりやすく詳細な説明があるので良いと思いました。ただ、そのような内容について既に知識がある人でも理解が深まる内容がたまにあるのはよかったです。例えば前述のその損失関数使うべきケースなどは、表でわかりやすくまとまっておりよかったです。

まとめ

Applied Data Science Using PySpark: Learn the End-to-End Predictive Model-Building Cycleを読んでみた感想などをまとめました。

データサイエンスの基礎的な処理からモデルのデプロイに関わるところまでをPySparkを用いて学ぶことができる一冊でした。
英語に抵抗がない方なら、おそらく僕よりも多くのことをこの本から学ぶことができるはずです。
大規模なデータを扱う方法に興味関心がある方はお手にとってみていただけると良いかと思いました。

References

References
1 TOEIC545点です。この業界にいながら、恥ずかしい…
2 プログラマ業界のミーム。ダニング=クルーガー効果で検索してください。
3 Learning Apache Spark with Python
4 https://spark.apache.org/docs/2.4.5/api/python/pyspark.sql.html#pyspark.sql.DataFrame.toPandas

コメント

タイトルとURLをコピーしました