databricksで学ぶPySpark入門-1

3 min読了の目安(約2700字TECH技術記事

はじめに

みなさんはビッグデータという言葉をご存知でしょうか?おそらくどこかで聞いたことがある方が多いと思います。ビッグデータとは、様々なデータソースによって生産される、大量のデータを指します。Googleはビッグデータを以下のように定義しています。

ビッグデータとは、一般的に、従来の(リレーショナル / モノリシック)データベース システムを使って保存、管理、分析するとコストがあまりに高くなるデータを指します。

データ分析から大きな価値を得るには、利用できるデータが多くなければなりません。したがってビッグデータはビジネス上の深いインサイトを手にするための豊富な「資源」だということに、さまざまな業種の組織が気付いています。また、機械学習モデルはトレーニング用データが多ければ多いほど効率が上がるので、機械学習とビッグデータは密接に補完し合っています。

これらを要約すると、「ビッグデータは、機械学習や分析をはじめとした様々なビジネス上のインパクトを生む可能性を秘めているが、同時に一般的なデータと同じ扱いが困難なデータのこと」と言えるでしょう。

この記事では、このビッグデータを処理、分析するための手段の一つとしてPySparkと、PySparkを簡単に扱うことができるサービス「Databricks」をご紹介しようと思います。
(最初はかなり文字多めになったので少し読みづらいかもしれません。ゴメンナサイ...)

Sparkとは?

ビッグデータを処理する方法として分散処理というものがあります。これは一つの処理を複数のクラスターに分割して処理を行うことで、高速化を達成するための処理方式です。通常、分散処理を行うためにはデータの管理やトランザクション、メモリの割当てなど面倒くさい部分が複数ありますが、分散処理フレームワークはこれらをいい感じに抽象化(開発者は気にしなくて良くなる)してくれます。

Sparkはオープンソースの分散処理フレームワークのソフトウェアで、正式名称を「Apache Spark」といいます。Apache Sparkの前身として「Apache Hadoop」という分散処理フレームワークがあり、Hadoopでの「メモリの効率化」や「ストレージへの複数回アクセス(メモリのI/O速度とストレージのI/O速度は全然違うのです。。。)」といった課題を解決するためにSparkが作られました。

PySparkとは?

Sparkは複数の言語で実装されています。JavaやScalaなどの言語でSparkの処理を記述することもできますが、その中の一つにPythonがあります。つまりPySparkは「Pythonで書く分散処理プログラミングフレームワーク」です。

Pythonを選んだ理由として、その実装のしやすさとデータ加工ライブラリの豊富さが特徴的です。ただし、Spark自体は元々Scalaで書かれたもので実行速度面では圧倒的にScalaが優位です。
逆にデータを直感的に扱ったり学習コストの低さを取るならPythonに軍配が上がります。処理速度をとことん突き詰める場合はPythonよりもScalaの方が優位となりますが、今回の記事ではあくまでSparkというソフトウェアへの入門が目的なのでPySparkを選択します。

databricksとは?

databricksはSparkをホスティングしたサービスです。

本来Sparkの環境構築を行う場合、サーバーのクラスター環境を構築し、それぞれ設定を行ったりクラウドサービスを利用しSparkプログラミング環境を準備する必要があります。前者は難易度が高くプログラミング前に挫折する可能性があり、後者は非常に高額なインスタンスを用意したりする必要があります。

databricksはこの両方の課題を解決します。databricksにはCommunity Editionというプランがあり、データの保存容量や起動するクラスター台数に制限はありますが、既に準備されたSpark環境を無料で利用することができます!!!!(しかもアップグレードしない限り勝手に課金されることがありません。これは嬉しい。)

インターフェースもJupyterNotebookと同じで、Python開発者なら慣れ親しんだUIで大規模データ処理を行うことができます。

ただし、仕事や趣味で本格的な分析や機械学習モデルの構築を行っている方はCommunity Editionの利用は制限が多くおすすめしません。有料プランも複数あるので自身のユースケースにあったプランの選択をオススメします。

それでは実際にdatabricksに登録し、手を動かしながらその素晴らしさを体験していきましょう→part2へ

(2020/11/30 part2執筆中)

最後に

記事を書いてる中で自分の知識不足を痛感しました。。。
継続的にちびちび書いていきます。。。

参考記事

ビッグデータの概要
Apache Sparkとは何か――使い方や基礎知識を徹底解説
Apache Spark: PythonとScalaのどっちを使うべきか比較する
Learning Apache Spark with PySpark & Databricks