この記事はCloudAnalytics Advent Calendarの7日目です。
ここでは3日目に準備したCloudantのデータを利用して、Data Science Experience上のNotebookを利用し、SparkのRDDの扱いと記事タイトルに含まれる日本語文をJanomeを利用して簡単な集計処理を扱います。※記事が長くなってしまったので分割します・・・
Node-REDとCloudantの準備と今回利用するデータは3日目の記事を参考にしてください。
また、今回のNotebookの環境はDataScienceExperienceを利用しています。
DSXの詳細は1日目の記事を参照ください。
##Cloudantの接続の準備
下記の図のadd data assetsから用意したCloudantへの接続を作成します。
右側のパネルが開いたらConnectionsのタブを選択し、
Create Connectionから新しい接続を作成します。
Create Connectionの画面を開いて必要な項目を設定していきます。
- Name:何かわかりやすい名前をつけます。
- Description:この接続の説明
- Service Category:Bluemix上のデータサービス又はその他の外部サービス。今回はData Serviceを選択します。
- Service Instance:Service Categoryに応じた内容がDropBoxで選択可能です。Bluemix上のCloudantを利用する場合は自動で列挙されます。
- Select:Service Instanceに応じて項目が変化しますが、Cloudantを利用する場合はService Instanceで選択したCloudantのDataBaseが列挙されます。ここでは作成してあるrssのDatabaseを選択しています。
Createボタンを押せば下記のようにCloudantのrssデータベースへの接続が作成されます。
以上でCloudantの準備が完了しました。とっても簡単ですね。
##Notebookの作成
次に分析を行うため、新しいNotebookを作成します。
プロジェクトの画面からadd notebooksを選択し、新しいNotebookを追加します。
1日目に説明した内容と重複しますが、簡単に。
- Name:ノートブックの名称(現在日本語名での作成は避けた方が無難)
- Description:ノートブックの説明
- Language:今回はPython3.5を利用します。
- Spark version:SparkのVersionです。2.0を利用します。
- Spark Service:利用するSparkServiceの選択です。
LanguageではPythonの2系も選択可能ですが、
今回は日本語の取り扱いを行う為、操作が簡単な3.5を選択しています。
Data Science Experienceについては1日目の記事を参考にしてください。
##Janomeの準備
作成を行うと自動的にNotebookが開かれます。
日本語の形態素解析を行うために、Pythonで利用可能な形態素解析器のJanomeのインストールを行います。
Data Science Experience上ではpipを使った操作が可能です。
最初のセルに下記コードを入力し、実行しましょう
!pip install janome
コードの実行などJupyterの基本的な使い方は1日目の記事を参照してください。
Janomeのインストールが終わった後、正常にJanomeが使えるか、簡単なテストをおこなってみます。
新しいセルに書きコードを入力し、実行しましょう。
from janome.tokenizer import Tokenizer
t = Tokenizer()
tokens = t.tokenize("すもももももももものうち")
for token in tokens:
print(token)
##Cloudantの接続コード
Janomeの準備ができたら、Cloudantからデータを取得するコードを書いていきます。
まずはCloudantの認証データをセルに埋めます。
先ほど登録したCloudantの情報を呼び出します。
右上のfind and add dataのメニューを開き、
Connectionsから先ほど登録したnews_rssを探します。
新しいセルを選択した状態でinsert to codeを押すと、セルに必要な情報が自動的に記述されます。
入力されたセルを実行して、credentials_1の変数を利用可能にします。
次にSparkSQLを利用してDataFrameの作成を行います。
新しいセルに下記のコードを入力し、実行します。
from pyspark.sql import SQLContext
#SQLContext
sqlContext = SQLContext(sc)
#load rss from cloudant
rss = sqlContext.read.format("com.cloudant.spark").\
option("cloudant.host",credentials_1["host"]).\
option("cloudant.username", credentials_1["username"]).\
option("cloudant.password",credentials_1["password"]).\
load("rss")
sqlContextにCloudantのフォーマットを指定し、先ほどのcredentials情報からhost名、接続ユーザー、パスワードを指定し、rssテーブルからデータをロードしています。
ここでAnother instance of Derby may have already booted the database・・・の例外が発生する場合、notebookのkernelのリスタートを行い再度最初のセルからコードを実行し直してください。内部でapache Derbyが利用されているようですが、connectionのハンドリングがうまくいかないケースがある模様・・・
以下のコードを実行し、ロードしたデータのスキーマを確認します。
rss.printSchema()
最後にデータの中身を確認してみます。
以下のコードを実行し、データを表示させます。
rss.show()
以上でpart1は終了です。part2からPySparkとJanomeを利用して日本語を操作していきます。