Movatterモバイル変換


[0]ホーム

URL:


TA
Uploaded byTatsuya Atsumi
PPTX, PDF5,905 views

Pythonで入門するApache Spark at PyCon2016

Pythonを使ったApache Sparkの解説スライドです。スライドの他、口頭やJupyterコードでの補足があります。

Embed presentation

Downloaded 35 times
Copyright © BrainPad Inc. All Rights Reserved.Pythonで入門するApache Spark2016年9月22日@PyConJP 2016
Copyright © BrainPad Inc. All Rights Reserved. 名前– Tatsuya Atsumi– Twitter: https://twitter.com/__Attsun__ 仕事– BrainPad– 自社製品(DMP)の開発 好きなもの– Python• 6年くらい– Spark• 1年半くらい その他– 今年刊行された「詳解Apache Spark」のレビュアーを担当させていただきました。とても良い本です!2自己紹介
Copyright © BrainPad Inc. All Rights Reserved. 対象者– Sparkについて興味があるが、詳しいことはまだよく知らない方。– Pythonで基本的なプログラミングができる方。 狙い– Sparkについての基礎的な特徴を理解していただく。– Pythonを使ったSparkの使用方法について理解していただく。– Sparkのライブラリについて、特にSparkSQLとMLlibについての理解をしていただく。3本プレゼンでの対象者と狙い
Copyright © BrainPad Inc. All Rights Reserved.1. Apache Sparkの概要と歴史2. 弊社内でのSpark使用事例について3. Apache Sparkの基礎(コアAPI)4. Spark SQL5. MLlib6. まとめ Appendix(実行モデルとスケジューリング)4アジェンダ
Copyright © BrainPad Inc. All Rights Reserved.1. Apache Sparkの概要と歴史5
Copyright © BrainPad Inc. All Rights Reserved.公式ドキュメントによると、Apache Spark is a fast and general-purpose cluster computing system.つまり、「高速」と「多目的」を特徴とした分散処理システム。 複数台のサーバを使って、大量のデータを高速に処理できる。 タスクのスケジューリングや障害発生時の復旧のような分散処理にまつわる面倒な点はSparkがカバーしてくれる。 MapReduceで行われていたようなログ集計から、レコメンドシステム、リアルタイム処理まで幅広い用途で使われている。6Sparkとは
Copyright © BrainPad Inc. All Rights Reserved. 中間データの少ないインメモリによる処理7高速?入力データ処理中間データ処理出力データMapReduceの場合、処理ごとに中間データを作成しているため、処理が増えるほどディスクIOが増え、パフォーマンスに影響を与える。入力データ処理 処理出力データSparkの場合、中間データを出力する必要のない処理はまとめて実行される。(勿論、中間データが必要になるケースもある。)
Copyright © BrainPad Inc. All Rights Reserved. 多様なライブラリ– Sparkには、便利なライブラリが最初から付属している。• SparkSQL(DBやJSONなど構造化データに対してSQLを使ってアクセス)• Spark Streaming(ストリーミングデータ処理)• MLlib(機械学習)• GraphX(グラフデータ処理)– すべてSparkのコアコンポーネントをベースとしているため、コードの再利用や学習コストの低下、メンテナンス容易性の向上が期待できる。8多目的?
Copyright © BrainPad Inc. All Rights Reserved. 多様なAPI– 以下4つのプログラミング言語をサポートしている。• Python• Scala• Java• R– Pythonは、以下バージョンをサポートしている。• 2.6以上• 3.4以上• PyPy2.3以上– 今日はPython2.7をベースとした使い方について話します。9多目的?
Copyright © BrainPad Inc. All Rights Reserved. 何であるか?– 大規模データの分散処理フレームワーク• 従来のMapReduceの代替みたいなイメージ 何でないか?– 分散ファイルシステム(HDFS)• HDFSやS3を代替するものではない。– リソーススケジューラ(YARN, Mesos)• Sparkがこれらのリソーススケジューラ上で起動する。– 小規模なデータを処理するツール• シンプルにPython書いたほうが速いし楽。• 増え続ける大規模データを一定の速度で処理したい、スケーラビリティを確保したい、というケースでなければはまらないと思われる。10Sparkは何であるか?何でないか?
Copyright © BrainPad Inc. All Rights Reserved. わかりやすいインターフェース– APIはmap, filterなど動作が把握できるものが多い。SQLも使える。 高速– 大規模データを高速に処理できる。(従来のMapReduceに比べてという話) 様々なユースケースに対応できる多様なライブラリ– 機械学習、ストリーミングのようなモダンなユースケースに対応できるのは嬉しい。 従来のHadoopスタックが利用可能– YARNやHDFSといった、従来のHadoopスタックを使用できるため、クラスタを新たに作り直す必要はない。 情報量の多さとコミュニティの安心感– 類似の様々なフレームワークが存在するが、情報量ではSparkに分がありそう。– バージョンアップを行う際にも後方互換生を気にしてくれるなど、開発も硬い。11なぜSparkを使うか?
Copyright © BrainPad Inc. All Rights Reserved. 略歴– 2009年からUC Berkleyで開発が始められる。– 2010年にオープンソース化。– 2013年にApache Software Foundationに寄贈される。– 2014年にApache Top-Level Projectに昇格– 2014年にバージョン1.0.0がリリース– 2016年にバージョン2.0.0がリリース現在(2016/8/15時点)での最新バージョンは2.0.0。今日の解説は2.0.0を前提としています。12Sparkの歴史
Copyright © BrainPad Inc. All Rights Reserved.2. 弊社でのSpark使用事例について13
Copyright © BrainPad Inc. All Rights Reserved.DeltaCubeについて 弊社が開発する、DMP製品。 サイトの行動ログなどから、ユーザーをセグメントに分けるツール。
Copyright © BrainPad Inc. All Rights Reserved.自動クラスタリング機能 人手を介さず、自動的にユーザーをいい感じにセグメントわけする機能。 これをSparkで実現。– 増え続ける大量のデータに対して複雑な処理をしたい、というニーズにぴったり。
Copyright © BrainPad Inc. All Rights Reserved. 16Sparkでの自動クラスタリングの流れ ユーザーの行動ログから、KMeansでクラスタリングをし、セグメントを判定して保存する。– 特徴量は、ユーザーの閲覧ページカテゴリの傾向
Copyright © BrainPad Inc. All Rights Reserved. 17Sparkでの自動クラスタリングの流れ 今日は基礎部分(コアAPI)を簡単に解説後、Spark SQL, MLlibに焦点を絞って解説します。
Copyright © BrainPad Inc. All Rights Reserved.3. Apache Sparkの基礎(コアAPI)18
Copyright © BrainPad Inc. All Rights Reserved. 19(jupyter)SparkをはじめてみようSparkはインタプリターがあるので、お試しで起動するのもすごく簡単です。デフォルトのPythonインタープリタのほか、iPythonやjupyter notebook上でも気軽に起動できます。今回はjupyter notebook上で起動してみます。
Copyright © BrainPad Inc. All Rights Reserved. RDDは、クラスタ上に分散したデータを束ねるコレクションオブジェクト。 Sparkでプログラミングを行う際は、RDDのみを意識し、個々のデータがどこにどのように分散されているか、という点は隠蔽されている。 そのため、ユーザーは通常のコレクションオブジェクトに対する操作を書く感覚で分散処理を実現できる。20RDDデータデータデータデータデータデータデータデータデータパーティションノードRDD
Copyright © BrainPad Inc. All Rights Reserved. RDDはTransformationと呼ばれる処理ごとに、新たなRDDオブジェクトが作成される。– map– filter 実際の処理は、Actionと呼ばれる処理が実行されるまで遅延される。– count– take– saveAsTextFile21遅延実行RDD RDD RDDtransformationにより生成 transformationにより生成参照を保持参照を保持
Copyright © BrainPad Inc. All Rights Reserved. 22(jupyter)RDDの処理イメージ
Copyright © BrainPad Inc. All Rights Reserved.4. Spark SQL23
Copyright © BrainPad Inc. All Rights Reserved. 構造化されたデータに対してSQLで処理を記述するためのライブラリ– JSONとかCSVとかRDBとか。 DataFrame– 構造化データを保持するデータコレクション。PandasのDataFrameのようなイメージ。– RDDをより使い勝手の良いのもにした感じ。24Spark SQLとは
Copyright © BrainPad Inc. All Rights Reserved. 25(jupyter) SparkSQLを動かしてみよう
Copyright © BrainPad Inc. All Rights Reserved. select, filter, join, limit, orderByのような基本的な操作 UDF(ユーザー定義関数)– もちろん、関数はPythonで記述可能。– https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.SQLContext.registerFunction window関数 abs, ceilのような関数関数やメソッドはそれ以外にも数多くあります。APIドキュメントを参照。26DataFrameのメソッド
Copyright © BrainPad Inc. All Rights Reserved. JSON CSV Parquet HiveTable その他– JDBC– ORC– 外部ライブラリを使うことで、avroなどのフォーマットも扱えるようになります。• csvはもともと外部ライブラリだったものが本体に取り込まれました。27様々なデータソース
Copyright © BrainPad Inc. All Rights Reserved. SQLで処理を記述する場合、Spark固有のAPIを使う必要がない。 DataFrameを使う場合でも、より少ないコードで可読性の高いコードが書ける。– RDDと比べて。 オプティマイザにより処理が最適化される– Databricksのベンチマークを参照• https://databricks.com/blog/2015/04/24/recent-performance-improvements-in-apache-spark-sql-python-dataframes-and-more.html– RDDによる処理は、ScalaがPythonの倍以上高速– DataFrameによる処理では言語間の差がないほか、RDDよりも高速– RDDに比べて細かいチューニングが不要になる。28(jupyter)Spark SQLのメリット
Copyright © BrainPad Inc. All Rights Reserved.5. MLlib29
Copyright © BrainPad Inc. All Rights Reserved. Sparkで機械学習を行うためのライブラリ。 ロジスティック回帰やKMeansなど、基本的なものは揃っている。 spark.mlとspark.mllibという2つのAPIがある。– 今回はDataFrameをベースとしたspark.mlを解説。30MLlib
Copyright © BrainPad Inc. All Rights Reserved. 学習モデルを作成する際によくある以下のような流れをシンプルに表現するためのAPI– spark.mlのみ。– 皆さんが好きなscikit-learnライブラリのPipelineに影響を受けたと書いてあります。– 入出力はDataFrame31パイプラインAPI元データ 加工データ 特徴量データ 学習モデル加工・抽出処理 特徴量作成処理 学習処理
Copyright © BrainPad Inc. All Rights Reserved. Transformer– 入力データ(DataFrame)から異なる出力データ(DataFrame)を生成するコンポーネント。– 文章から単語を生成するTokenizerなど。• 「This is a pen」-> 「”This”, “is”, “a”, “pen”」 Estimator– DataFrameからTransformerを生成するコンポーネント。– LogisticRegressionやKMeansなどの学習アルゴリズム。 Pipeline– TransformerやEstimatorを組み合わせて予測モデルを構築する。32パイプラインAPIを構成するコンポーネント
Copyright © BrainPad Inc. All Rights Reserved. 33パイプラインAPIを構成するコンポーネント元データ 加工データ 特徴量データ 学習モデル加工・抽出処理 特徴量作成処理 学習処理PipelineTransformer Estimator 先ほどの図をコンポーネントにわけると以下のような分類となる。
Copyright © BrainPad Inc. All Rights Reserved. スパムメッセージの判定を行う。– データセット• UCI(カリフォルニア大学アーバイン校)にあるやつ• https://archive.ics.uci.edu/ml/datasets/SMS+Spam+Collection• Sparkが生まれたのはバークレー校– 特徴量• 単語の出現頻度– モデル• ロジスティック回帰– 扱うライブラリ• SparkML• DataFrame34(jupyter)SparkML(&DataFrame)の使用例
Copyright © BrainPad Inc. All Rights Reserved.6. まとめ35
Copyright © BrainPad Inc. All Rights Reserved. Sparkは、インメモリ処理による高速性と、多目的なライブラリを持つ分散処理フレームワーク。 Spark SQLとMLlibを組み合わせることで、弊社のケースのような大規模データに対する複雑な処理も簡単に。 データ量の少ないタスクにとっては速度的にも運用負荷の面でもいいことがないと思われるので、やみくもな導入は避けたい。36まとめ
Copyright © BrainPad Inc. All Rights Reserved. 自分で動かしてみて、Sparkを体感してみましょう。 本を買ってみましょう。 GraphXやSpark Streamingなど、今回触れなかったライブラリについて調べてみましょう。 DriverやExecutorといった実行モデルについて調べてみましょう。 Shuffle処理について調べてみましょう。– パフォーマンス改善の勘所の一つ37さらに知りたい方へ
Copyright © BrainPad Inc. All Rights Reserved.ブレインパッドでは、「データ分析」と「エンジニアリング」の融合により新しい価値を提供したいエンジニア・データサイエンティストを募集しています!ご興味ある方は是非お気軽に話しかけてください!38WE ARE HIRING !!
Copyright © BrainPad Inc. All Rights Reserved.ご静聴ありがとうございました。39
Copyright © BrainPad Inc. All Rights Reserved.株式会社ブレインパッド〒108-0071 東京都港区白金台3-2-10 白金台ビル3FTEL:03-6721-7001FAX:03-6721-7010info@brainpad.co.jpCopyright © BrainPad Inc. All Rights Reserved.www.brainpad.co.jp
Copyright © BrainPad Inc. All Rights Reserved.Appendix: 実行モデルとスケジューリング41
Copyright © BrainPad Inc. All Rights Reserved. 42Sparkの実行モデルDriverExecutor Driver– ユーザープログラムをtaskに変換し、executorに実行を命令する。– Actionに伴いexecutorからデータを取得する。– ユーザープログラムのmainメソッドを実行するJVMプロセス。driverが終了すると、Sparkアプリケーション自体が終了する。 Executor– driverから命令されたtaskを実行する。– RDDのキャッシュを保持する。– Spark起動時に起動されるJVMプロセス。※実際には、YARNやMesosなどのクラスタマネージャ上で動作するので、それによって実行モデルは若干異なります。ExecutorExecutor
Copyright © BrainPad Inc. All Rights Reserved.1. ユーザープログラムが、transformationを組み合わせてRDDの参照グラフを作成する。2. ユーザープログラムが、actionを実行する。3. Driverが、RDDの依存グラフから実行プランを作成する。– 実行プランは複数のステージからなる。– Stage• 複数のTaskの集合。• Shuffle(後述)が必要となるポイントでStageを分ける。• 同じパーティションに対する処理が連続している場合、マージすることで最適化する。– Task• executorの実行する処理の最小単位。1パーティションごとに作成される。4. Executorに各Stageの処理を命令する。43Driverによる実行計画作成
Copyright © BrainPad Inc. All Rights Reserved. Shuffle– reduceByKey等により複数のパーティションを1つにまとめるため、データをあるexecutorから別のexecutorに転送する処理。– 処理がローカルで済まなくなるため、パフォーマンス上のボトルネックになりやすい。– Shuffleがある場合、Stageの分割が発生する。44ShuffleRDDRDDRDDRDDRDDRDDRDDRDDRDDRDDRDDRDD同じパーティションに閉じた処理ならシャッフルは不要(mapなど)別パーティションが必要になる処理では、シャッフルが生じる。
Copyright © BrainPad Inc. All Rights Reserved. Stageは、Shuffleを境界として分断される。– このケースではjoinがShuffleを起こしている。 同じパーティションに対する処理が連続する場合、処理は1つのステージにマージされる。(※)– Stage1はmapとfilterの2つの処理があるが、実際にはmapとfilterを合成した1つのStageに変換されている。– これは“pipelining”と呼ばれる。– Stageは複数のtaskで構成されており、それぞれがexecutorで処理される。※厳密には、親RDDが1つの子RDDからのみしか参照されていない場合。(複数パーティションをマージするunionもこれに該当する)45Stageの分割例map filtermapjoinStage1Stage2Stage3
Copyright © BrainPad Inc. All Rights Reserved. py4jを使って、PythonプログラムとJVMでやりとりをする。 アクションやシャッフル処理は、基本的にはJava / Scalaと同じくJVM上で実行される。– 一部のアクションやmap、filter等に渡される関数はJVMが起動するPythonで実行される。46PythonでのSpark実行モデルPython py4jDriver(JVM)py4j ExecuterExecuterExecuter(JVM)PythonPythonPython

Recommended

PDF
Spark勉強会_ibm_20151014-公開版
PDF
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
PDF
ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall
PDF
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
PDF
Apache Sparkの紹介
PDF
Hadoopエコシステムの最新動向とNTTデータの取り組み (OSC 2016 Tokyo/Spring 講演資料)
PPSX
HBaseとSparkでセンサーデータを有効活用 #hbasejp
PDF
SparkとCassandraの美味しい関係
PDF
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
PPT
はやわかりHadoop
PPTX
Pysparkで始めるデータ分析
PDF
本当にあったApache Spark障害の話
PDF
Apache Sparkについて
PDF
15.05.21_ビッグデータ分析基盤Sparkの最新動向とその活用-Spark SUMMIT EAST 2015-
PPTX
Apache cassandraと apache sparkで作るデータ解析プラットフォーム
PDF
Sparkを用いたビッグデータ解析 〜 前編 〜
PDF
Apache Spark の紹介(前半:Sparkのキホン)
PDF
Spark Streamingを活用したシステムの検証結果と設計時のノウハウ
PPTX
初めてのSpark streaming 〜kafka+sparkstreamingの紹介〜
PDF
SparkやBigQueryなどを用いた モバイルゲーム分析環境
PPTX
Apache Sparkを使った感情極性分析
PDF
Hadoop ecosystem NTTDATA osc15tk
PDF
QConTokyo2015「Sparkを用いたビッグデータ解析 〜後編〜」
PDF
Apache Sparkのご紹介 (後半:技術トピック)
PPTX
Bluemixを使ったTwitter分析
PDF
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~
PPTX
Big datauniversity
PDF
基幹業務もHadoopで!! -ローソンにおける店舗発注業務への Hadoop + Hive導入と その取り組みについて-
PPTX
Spark Summit 2014 の報告と最近の取り組みについて
PDF
2015-11-17 きちんと知りたいApache Spark ~機械学習とさまざまな機能群

More Related Content

PDF
Spark勉強会_ibm_20151014-公開版
PDF
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
PDF
ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall
PDF
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
PDF
Apache Sparkの紹介
PDF
Hadoopエコシステムの最新動向とNTTデータの取り組み (OSC 2016 Tokyo/Spring 講演資料)
PPSX
HBaseとSparkでセンサーデータを有効活用 #hbasejp
PDF
SparkとCassandraの美味しい関係
Spark勉強会_ibm_20151014-公開版
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
ビッグデータ活用を加速する!分散SQLエンジン Spark SQL のご紹介 20161105 OSC Tokyo Fall
ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)
Apache Sparkの紹介
Hadoopエコシステムの最新動向とNTTデータの取り組み (OSC 2016 Tokyo/Spring 講演資料)
HBaseとSparkでセンサーデータを有効活用 #hbasejp
SparkとCassandraの美味しい関係

What's hot

PDF
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
PPT
はやわかりHadoop
PPTX
Pysparkで始めるデータ分析
PDF
本当にあったApache Spark障害の話
PDF
Apache Sparkについて
PDF
15.05.21_ビッグデータ分析基盤Sparkの最新動向とその活用-Spark SUMMIT EAST 2015-
PPTX
Apache cassandraと apache sparkで作るデータ解析プラットフォーム
PDF
Sparkを用いたビッグデータ解析 〜 前編 〜
PDF
Apache Spark の紹介(前半:Sparkのキホン)
PDF
Spark Streamingを活用したシステムの検証結果と設計時のノウハウ
PPTX
初めてのSpark streaming 〜kafka+sparkstreamingの紹介〜
PDF
SparkやBigQueryなどを用いた モバイルゲーム分析環境
PPTX
Apache Sparkを使った感情極性分析
PDF
Hadoop ecosystem NTTDATA osc15tk
PDF
QConTokyo2015「Sparkを用いたビッグデータ解析 〜後編〜」
PDF
Apache Sparkのご紹介 (後半:技術トピック)
PPTX
Bluemixを使ったTwitter分析
PDF
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~
PPTX
Big datauniversity
PDF
基幹業務もHadoopで!! -ローソンにおける店舗発注業務への Hadoop + Hive導入と その取り組みについて-
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
はやわかりHadoop
Pysparkで始めるデータ分析
本当にあったApache Spark障害の話
Apache Sparkについて
15.05.21_ビッグデータ分析基盤Sparkの最新動向とその活用-Spark SUMMIT EAST 2015-
Apache cassandraと apache sparkで作るデータ解析プラットフォーム
Sparkを用いたビッグデータ解析 〜 前編 〜
Apache Spark の紹介(前半:Sparkのキホン)
Spark Streamingを活用したシステムの検証結果と設計時のノウハウ
初めてのSpark streaming 〜kafka+sparkstreamingの紹介〜
SparkやBigQueryなどを用いた モバイルゲーム分析環境
Apache Sparkを使った感情極性分析
Hadoop ecosystem NTTDATA osc15tk
QConTokyo2015「Sparkを用いたビッグデータ解析 〜後編〜」
Apache Sparkのご紹介 (後半:技術トピック)
Bluemixを使ったTwitter分析
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~
Big datauniversity
基幹業務もHadoopで!! -ローソンにおける店舗発注業務への Hadoop + Hive導入と その取り組みについて-

Similar to Pythonで入門するApache Spark at PyCon2016

PPTX
Spark Summit 2014 の報告と最近の取り組みについて
PDF
2015-11-17 きちんと知りたいApache Spark ~機械学習とさまざまな機能群
PPTX
SparkとJupyterNotebookを使った分析処理 [Html5 conference]
PDF
Data Scientist Workbench - dots0729
PDF
データ分析に必要なスキルをつけるためのツール~Jupyter notebook、r連携、機械学習からsparkまで~
PPTX
1028 TECH & BRIDGE MEETING
PDF
SparkMLlibで始めるビッグデータを対象とした機械学習入門
PDF
20190517 Spark+AI Summit2019最新レポート
PDF
2016-02-08 Spark MLlib Now and Beyond@Spark Conference Japan 2016
PPT
Quick Overview of Upcoming Spark 3.0 + α
PDF
Survey of Apache Spark
PPTX
2015 03-12 道玄坂LT祭り第2回 Spark DataFrame Introduction
PDF
The Future of Apache Spark
PPTX
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
PPTX
2014 11-20 Machine Learning with Apache Spark 勉強会資料
PDF
HivemallとSpark MLlibの比較
PDF
Yifeng spark-final-public
PPTX
Apache Spark チュートリアル
PDF
Spot Instance + Spark + MLlibで実現する簡単低コスト機械学習
PPTX
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
Spark Summit 2014 の報告と最近の取り組みについて
2015-11-17 きちんと知りたいApache Spark ~機械学習とさまざまな機能群
SparkとJupyterNotebookを使った分析処理 [Html5 conference]
Data Scientist Workbench - dots0729
データ分析に必要なスキルをつけるためのツール~Jupyter notebook、r連携、機械学習からsparkまで~
1028 TECH & BRIDGE MEETING
SparkMLlibで始めるビッグデータを対象とした機械学習入門
20190517 Spark+AI Summit2019最新レポート
2016-02-08 Spark MLlib Now and Beyond@Spark Conference Japan 2016
Quick Overview of Upcoming Spark 3.0 + α
Survey of Apache Spark
2015 03-12 道玄坂LT祭り第2回 Spark DataFrame Introduction
The Future of Apache Spark
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
2014 11-20 Machine Learning with Apache Spark 勉強会資料
HivemallとSpark MLlibの比較
Yifeng spark-final-public
Apache Spark チュートリアル
Spot Instance + Spark + MLlibで実現する簡単低コスト機械学習
SQL Server 使いのための Azure Synapse Analytics - Spark 入門

Pythonで入門するApache Spark at PyCon2016

  • 1.
    Copyright © BrainPadInc. All Rights Reserved.Pythonで入門するApache Spark2016年9月22日@PyConJP 2016
  • 2.
    Copyright © BrainPadInc. All Rights Reserved. 名前– Tatsuya Atsumi– Twitter: https://twitter.com/__Attsun__ 仕事– BrainPad– 自社製品(DMP)の開発 好きなもの– Python• 6年くらい– Spark• 1年半くらい その他– 今年刊行された「詳解Apache Spark」のレビュアーを担当させていただきました。とても良い本です!2自己紹介
  • 3.
    Copyright © BrainPadInc. All Rights Reserved. 対象者– Sparkについて興味があるが、詳しいことはまだよく知らない方。– Pythonで基本的なプログラミングができる方。 狙い– Sparkについての基礎的な特徴を理解していただく。– Pythonを使ったSparkの使用方法について理解していただく。– Sparkのライブラリについて、特にSparkSQLとMLlibについての理解をしていただく。3本プレゼンでの対象者と狙い
  • 4.
    Copyright © BrainPadInc. All Rights Reserved.1. Apache Sparkの概要と歴史2. 弊社内でのSpark使用事例について3. Apache Sparkの基礎(コアAPI)4. Spark SQL5. MLlib6. まとめ Appendix(実行モデルとスケジューリング)4アジェンダ
  • 5.
    Copyright © BrainPadInc. All Rights Reserved.1. Apache Sparkの概要と歴史5
  • 6.
    Copyright © BrainPadInc. All Rights Reserved.公式ドキュメントによると、Apache Spark is a fast and general-purpose cluster computing system.つまり、「高速」と「多目的」を特徴とした分散処理システム。 複数台のサーバを使って、大量のデータを高速に処理できる。 タスクのスケジューリングや障害発生時の復旧のような分散処理にまつわる面倒な点はSparkがカバーしてくれる。 MapReduceで行われていたようなログ集計から、レコメンドシステム、リアルタイム処理まで幅広い用途で使われている。6Sparkとは
  • 7.
    Copyright © BrainPadInc. All Rights Reserved. 中間データの少ないインメモリによる処理7高速?入力データ処理中間データ処理出力データMapReduceの場合、処理ごとに中間データを作成しているため、処理が増えるほどディスクIOが増え、パフォーマンスに影響を与える。入力データ処理 処理出力データSparkの場合、中間データを出力する必要のない処理はまとめて実行される。(勿論、中間データが必要になるケースもある。)
  • 8.
    Copyright © BrainPadInc. All Rights Reserved. 多様なライブラリ– Sparkには、便利なライブラリが最初から付属している。• SparkSQL(DBやJSONなど構造化データに対してSQLを使ってアクセス)• Spark Streaming(ストリーミングデータ処理)• MLlib(機械学習)• GraphX(グラフデータ処理)– すべてSparkのコアコンポーネントをベースとしているため、コードの再利用や学習コストの低下、メンテナンス容易性の向上が期待できる。8多目的?
  • 9.
    Copyright © BrainPadInc. All Rights Reserved. 多様なAPI– 以下4つのプログラミング言語をサポートしている。• Python• Scala• Java• R– Pythonは、以下バージョンをサポートしている。• 2.6以上• 3.4以上• PyPy2.3以上– 今日はPython2.7をベースとした使い方について話します。9多目的?
  • 10.
    Copyright © BrainPadInc. All Rights Reserved. 何であるか?– 大規模データの分散処理フレームワーク• 従来のMapReduceの代替みたいなイメージ 何でないか?– 分散ファイルシステム(HDFS)• HDFSやS3を代替するものではない。– リソーススケジューラ(YARN, Mesos)• Sparkがこれらのリソーススケジューラ上で起動する。– 小規模なデータを処理するツール• シンプルにPython書いたほうが速いし楽。• 増え続ける大規模データを一定の速度で処理したい、スケーラビリティを確保したい、というケースでなければはまらないと思われる。10Sparkは何であるか?何でないか?
  • 11.
    Copyright © BrainPadInc. All Rights Reserved. わかりやすいインターフェース– APIはmap, filterなど動作が把握できるものが多い。SQLも使える。 高速– 大規模データを高速に処理できる。(従来のMapReduceに比べてという話) 様々なユースケースに対応できる多様なライブラリ– 機械学習、ストリーミングのようなモダンなユースケースに対応できるのは嬉しい。 従来のHadoopスタックが利用可能– YARNやHDFSといった、従来のHadoopスタックを使用できるため、クラスタを新たに作り直す必要はない。 情報量の多さとコミュニティの安心感– 類似の様々なフレームワークが存在するが、情報量ではSparkに分がありそう。– バージョンアップを行う際にも後方互換生を気にしてくれるなど、開発も硬い。11なぜSparkを使うか?
  • 12.
    Copyright © BrainPadInc. All Rights Reserved. 略歴– 2009年からUC Berkleyで開発が始められる。– 2010年にオープンソース化。– 2013年にApache Software Foundationに寄贈される。– 2014年にApache Top-Level Projectに昇格– 2014年にバージョン1.0.0がリリース– 2016年にバージョン2.0.0がリリース現在(2016/8/15時点)での最新バージョンは2.0.0。今日の解説は2.0.0を前提としています。12Sparkの歴史
  • 13.
    Copyright © BrainPadInc. All Rights Reserved.2. 弊社でのSpark使用事例について13
  • 14.
    Copyright © BrainPadInc. All Rights Reserved.DeltaCubeについて 弊社が開発する、DMP製品。 サイトの行動ログなどから、ユーザーをセグメントに分けるツール。
  • 15.
    Copyright © BrainPadInc. All Rights Reserved.自動クラスタリング機能 人手を介さず、自動的にユーザーをいい感じにセグメントわけする機能。 これをSparkで実現。– 増え続ける大量のデータに対して複雑な処理をしたい、というニーズにぴったり。
  • 16.
    Copyright © BrainPadInc. All Rights Reserved. 16Sparkでの自動クラスタリングの流れ ユーザーの行動ログから、KMeansでクラスタリングをし、セグメントを判定して保存する。– 特徴量は、ユーザーの閲覧ページカテゴリの傾向
  • 17.
    Copyright © BrainPadInc. All Rights Reserved. 17Sparkでの自動クラスタリングの流れ 今日は基礎部分(コアAPI)を簡単に解説後、Spark SQL, MLlibに焦点を絞って解説します。
  • 18.
    Copyright © BrainPadInc. All Rights Reserved.3. Apache Sparkの基礎(コアAPI)18
  • 19.
    Copyright © BrainPadInc. All Rights Reserved. 19(jupyter)SparkをはじめてみようSparkはインタプリターがあるので、お試しで起動するのもすごく簡単です。デフォルトのPythonインタープリタのほか、iPythonやjupyter notebook上でも気軽に起動できます。今回はjupyter notebook上で起動してみます。
  • 20.
    Copyright © BrainPadInc. All Rights Reserved. RDDは、クラスタ上に分散したデータを束ねるコレクションオブジェクト。 Sparkでプログラミングを行う際は、RDDのみを意識し、個々のデータがどこにどのように分散されているか、という点は隠蔽されている。 そのため、ユーザーは通常のコレクションオブジェクトに対する操作を書く感覚で分散処理を実現できる。20RDDデータデータデータデータデータデータデータデータデータパーティションノードRDD
  • 21.
    Copyright © BrainPadInc. All Rights Reserved. RDDはTransformationと呼ばれる処理ごとに、新たなRDDオブジェクトが作成される。– map– filter 実際の処理は、Actionと呼ばれる処理が実行されるまで遅延される。– count– take– saveAsTextFile21遅延実行RDD RDD RDDtransformationにより生成 transformationにより生成参照を保持参照を保持
  • 22.
    Copyright © BrainPadInc. All Rights Reserved. 22(jupyter)RDDの処理イメージ
  • 23.
    Copyright © BrainPadInc. All Rights Reserved.4. Spark SQL23
  • 24.
    Copyright © BrainPadInc. All Rights Reserved. 構造化されたデータに対してSQLで処理を記述するためのライブラリ– JSONとかCSVとかRDBとか。 DataFrame– 構造化データを保持するデータコレクション。PandasのDataFrameのようなイメージ。– RDDをより使い勝手の良いのもにした感じ。24Spark SQLとは
  • 25.
    Copyright © BrainPadInc. All Rights Reserved. 25(jupyter) SparkSQLを動かしてみよう
  • 26.
    Copyright © BrainPadInc. All Rights Reserved. select, filter, join, limit, orderByのような基本的な操作 UDF(ユーザー定義関数)– もちろん、関数はPythonで記述可能。– https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.SQLContext.registerFunction window関数 abs, ceilのような関数関数やメソッドはそれ以外にも数多くあります。APIドキュメントを参照。26DataFrameのメソッド
  • 27.
    Copyright © BrainPadInc. All Rights Reserved. JSON CSV Parquet HiveTable その他– JDBC– ORC– 外部ライブラリを使うことで、avroなどのフォーマットも扱えるようになります。• csvはもともと外部ライブラリだったものが本体に取り込まれました。27様々なデータソース
  • 28.
    Copyright © BrainPadInc. All Rights Reserved. SQLで処理を記述する場合、Spark固有のAPIを使う必要がない。 DataFrameを使う場合でも、より少ないコードで可読性の高いコードが書ける。– RDDと比べて。 オプティマイザにより処理が最適化される– Databricksのベンチマークを参照• https://databricks.com/blog/2015/04/24/recent-performance-improvements-in-apache-spark-sql-python-dataframes-and-more.html– RDDによる処理は、ScalaがPythonの倍以上高速– DataFrameによる処理では言語間の差がないほか、RDDよりも高速– RDDに比べて細かいチューニングが不要になる。28(jupyter)Spark SQLのメリット
  • 29.
    Copyright © BrainPadInc. All Rights Reserved.5. MLlib29
  • 30.
    Copyright © BrainPadInc. All Rights Reserved. Sparkで機械学習を行うためのライブラリ。 ロジスティック回帰やKMeansなど、基本的なものは揃っている。 spark.mlとspark.mllibという2つのAPIがある。– 今回はDataFrameをベースとしたspark.mlを解説。30MLlib
  • 31.
    Copyright © BrainPadInc. All Rights Reserved. 学習モデルを作成する際によくある以下のような流れをシンプルに表現するためのAPI– spark.mlのみ。– 皆さんが好きなscikit-learnライブラリのPipelineに影響を受けたと書いてあります。– 入出力はDataFrame31パイプラインAPI元データ 加工データ 特徴量データ 学習モデル加工・抽出処理 特徴量作成処理 学習処理
  • 32.
    Copyright © BrainPadInc. All Rights Reserved. Transformer– 入力データ(DataFrame)から異なる出力データ(DataFrame)を生成するコンポーネント。– 文章から単語を生成するTokenizerなど。• 「This is a pen」-> 「”This”, “is”, “a”, “pen”」 Estimator– DataFrameからTransformerを生成するコンポーネント。– LogisticRegressionやKMeansなどの学習アルゴリズム。 Pipeline– TransformerやEstimatorを組み合わせて予測モデルを構築する。32パイプラインAPIを構成するコンポーネント
  • 33.
    Copyright © BrainPadInc. All Rights Reserved. 33パイプラインAPIを構成するコンポーネント元データ 加工データ 特徴量データ 学習モデル加工・抽出処理 特徴量作成処理 学習処理PipelineTransformer Estimator 先ほどの図をコンポーネントにわけると以下のような分類となる。
  • 34.
    Copyright © BrainPadInc. All Rights Reserved. スパムメッセージの判定を行う。– データセット• UCI(カリフォルニア大学アーバイン校)にあるやつ• https://archive.ics.uci.edu/ml/datasets/SMS+Spam+Collection• Sparkが生まれたのはバークレー校– 特徴量• 単語の出現頻度– モデル• ロジスティック回帰– 扱うライブラリ• SparkML• DataFrame34(jupyter)SparkML(&DataFrame)の使用例
  • 35.
    Copyright © BrainPadInc. All Rights Reserved.6. まとめ35
  • 36.
    Copyright © BrainPadInc. All Rights Reserved. Sparkは、インメモリ処理による高速性と、多目的なライブラリを持つ分散処理フレームワーク。 Spark SQLとMLlibを組み合わせることで、弊社のケースのような大規模データに対する複雑な処理も簡単に。 データ量の少ないタスクにとっては速度的にも運用負荷の面でもいいことがないと思われるので、やみくもな導入は避けたい。36まとめ
  • 37.
    Copyright © BrainPadInc. All Rights Reserved. 自分で動かしてみて、Sparkを体感してみましょう。 本を買ってみましょう。 GraphXやSpark Streamingなど、今回触れなかったライブラリについて調べてみましょう。 DriverやExecutorといった実行モデルについて調べてみましょう。 Shuffle処理について調べてみましょう。– パフォーマンス改善の勘所の一つ37さらに知りたい方へ
  • 38.
    Copyright © BrainPadInc. All Rights Reserved.ブレインパッドでは、「データ分析」と「エンジニアリング」の融合により新しい価値を提供したいエンジニア・データサイエンティストを募集しています!ご興味ある方は是非お気軽に話しかけてください!38WE ARE HIRING !!
  • 39.
    Copyright © BrainPadInc. All Rights Reserved.ご静聴ありがとうございました。39
  • 40.
    Copyright © BrainPadInc. All Rights Reserved.株式会社ブレインパッド〒108-0071 東京都港区白金台3-2-10 白金台ビル3FTEL:03-6721-7001FAX:03-6721-7010info@brainpad.co.jpCopyright © BrainPad Inc. All Rights Reserved.www.brainpad.co.jp
  • 41.
    Copyright © BrainPadInc. All Rights Reserved.Appendix: 実行モデルとスケジューリング41
  • 42.
    Copyright © BrainPadInc. All Rights Reserved. 42Sparkの実行モデルDriverExecutor Driver– ユーザープログラムをtaskに変換し、executorに実行を命令する。– Actionに伴いexecutorからデータを取得する。– ユーザープログラムのmainメソッドを実行するJVMプロセス。driverが終了すると、Sparkアプリケーション自体が終了する。 Executor– driverから命令されたtaskを実行する。– RDDのキャッシュを保持する。– Spark起動時に起動されるJVMプロセス。※実際には、YARNやMesosなどのクラスタマネージャ上で動作するので、それによって実行モデルは若干異なります。ExecutorExecutor
  • 43.
    Copyright © BrainPadInc. All Rights Reserved.1. ユーザープログラムが、transformationを組み合わせてRDDの参照グラフを作成する。2. ユーザープログラムが、actionを実行する。3. Driverが、RDDの依存グラフから実行プランを作成する。– 実行プランは複数のステージからなる。– Stage• 複数のTaskの集合。• Shuffle(後述)が必要となるポイントでStageを分ける。• 同じパーティションに対する処理が連続している場合、マージすることで最適化する。– Task• executorの実行する処理の最小単位。1パーティションごとに作成される。4. Executorに各Stageの処理を命令する。43Driverによる実行計画作成
  • 44.
    Copyright © BrainPadInc. All Rights Reserved. Shuffle– reduceByKey等により複数のパーティションを1つにまとめるため、データをあるexecutorから別のexecutorに転送する処理。– 処理がローカルで済まなくなるため、パフォーマンス上のボトルネックになりやすい。– Shuffleがある場合、Stageの分割が発生する。44ShuffleRDDRDDRDDRDDRDDRDDRDDRDDRDDRDDRDDRDD同じパーティションに閉じた処理ならシャッフルは不要(mapなど)別パーティションが必要になる処理では、シャッフルが生じる。
  • 45.
    Copyright © BrainPadInc. All Rights Reserved. Stageは、Shuffleを境界として分断される。– このケースではjoinがShuffleを起こしている。 同じパーティションに対する処理が連続する場合、処理は1つのステージにマージされる。(※)– Stage1はmapとfilterの2つの処理があるが、実際にはmapとfilterを合成した1つのStageに変換されている。– これは“pipelining”と呼ばれる。– Stageは複数のtaskで構成されており、それぞれがexecutorで処理される。※厳密には、親RDDが1つの子RDDからのみしか参照されていない場合。(複数パーティションをマージするunionもこれに該当する)45Stageの分割例map filtermapjoinStage1Stage2Stage3
  • 46.
    Copyright © BrainPadInc. All Rights Reserved. py4jを使って、PythonプログラムとJVMでやりとりをする。 アクションやシャッフル処理は、基本的にはJava / Scalaと同じくJVM上で実行される。– 一部のアクションやmap、filter等に渡される関数はJVMが起動するPythonで実行される。46PythonでのSpark実行モデルPython py4jDriver(JVM)py4j ExecuterExecuterExecuter(JVM)PythonPythonPython

Editor's Notes

  • #13 7分
  • #18 10分
  • #21 クラスタ上に分散するデータコレクションオブジェクト
  • #23 14分
  • #29 21分
  • #32 例えば、テキストをトークナイザで単語にわけて(加工・抽出処理)、単語ごとに出現頻度を数値化し(特徴量作成処理)、ロジスティック回帰で分類器を作成する。
  • #35 28分

[8]ページ先頭

©2009-2025 Movatter.jp