Bluemix上のApache Spark環境を使ってみた

# はじめに
Apache Saprkのお勉強を始めるにあたってPC上に環境を作ってみようと思ったのですが、IBM Bluemix上でSparkのサービスが提供されているようなので使ってみました。
基本的なコマンドを実行してみる所までのメモです。

※Bluemixは30日間無償のフリートライアルというのが提供されています。
※Bluemixのユーザーインターフェースは結構コロコロと変わるイメージがあります。細かい所はすぐ変わってしまうかもしれませんがあしからず。

# 手順例

## Sparkインスタンス作成
BluemixにログインしてカタログからSparkを検索します。
データ&分析のカテゴリに 「Apache Spark」というサービスが表示されるので、ポチっとクリックします。
![image01.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/18e5c112-6bc4-7245-1f24-4e67443894ef.jpeg)

サービス名とか変更できるようですが、そのまま。
価格プランは2 Spark Execution(無料)を選択して、作成！
![image02.jpg](https://qiita-image-store.s3.amazonaws.com/0/132331/21d60218-03e2-a94f-23b9-3a91e37d5591.jpeg)

インスタンスが作成されて、以下のような画面が表示されました。
![image03.jpg](https://qiita-image-store.s3.amazonaws.com/0/132331/8727de3c-a68b-12a9-bc5a-e91b7c470bb7.jpeg)

さて、この辺↓の記事をみてると、
[Apache Spark for Bluemixで天気情報を高速分析](http://qiita.com/khara914/items/231824b36bad3b9be086#%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%E5%A4%A9%E6%B0%97%E6%83%85%E5%A0%B1%E3%82%92%E3%83%AD%E3%83%BC%E3%83%89%E3%81%97spark%E3%81%A7%E5%88%86%E6%9E%90)
Sparkを手っ取り早く使ってみるツールとして、Jupyter Notebookというツールが使えそうだったのでそれを想定していたら、上の画面に、Notebookは2017年1月で使えなくなるようなことが書いてありました。Data Science Experience なるものに置き換わるようですね。

> The notebook capabilities in IBM Analytics for Apache Spark will be discontinued in January 2017.
Your new platform to work with notebooks is Data Science Experience.

## DSX(Data Science Experience)の設定
DSXのサービス？を利用してNotebook(これはJupyter Notebookと同じモノなのか？)を使うための設定をします。

Data Science Experienceのリンクを辿ると以下のページに飛ばされます。
![image_dsx01.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/98086ff5-6058-1e67-b390-87d129e7ad94.jpeg)

SignInのリンクから指示に従ってBluemixのアカウントを元に、DSX(Data Science Experience)のアカウントを設定します。
![image_dsx02.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/17dc25cd-3f62-e49d-20c2-a20ef12dc83e.jpeg)

DSXにログイン？した状態になるようです。
左上のメニューから「My Projects」を選択します。
![image_dsx025.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/f5028414-6090-39fe-fc67-9f35ab4f26ab.jpeg)

My Projectsの右上の「create project」を選択します。
![image_dsx03.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/9460af50-3771-0784-a21b-bd11a277c4ff.jpeg)

プロジェクトの名前などを設定します。
ここで、Spark Serviceとして先ほど作成したインスタンスが表示されるので、それを選択します。
で、「Create」
![image_dsx04.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/515f432b-8220-cb22-7994-673285962748.jpeg)

プロジェクトが作成されて、以下のようなメニューが出てきます。
Notebooks という項目の右側の「add notebooks」をクリックします。
![image_dsx05.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/bf701391-f564-2c60-c074-dca944c86e6d.jpeg)

Notebookの設定を行います。ここでは、言語としてScala、Spark Versionとして2.0を選択し、Spark Serviceは先に作成したインスタンスを指定します。
![image_dsx06_2.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/cb03b777-e688-9a6b-d388-f0173e3bfaf9.jpeg)

「Create Notebook」をすると、以下のようにNotebookが起動し、Scalaのコードが投入できる状態になりました。
![image_dsx065.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/c89d9106-c287-de96-5ce3-397718fb9de3.jpeg)

## Scalaコードの実行1
簡単なコードを試してみます。
![image_dsx07_2.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/97d65326-b161-1f5a-8a39-bc33ef998f57.jpeg)
ふむ、一応動いているっぽい。

## Scalaコードの実行2
次にcsvファイルを読んでRDDで扱ってみたいと思います。
テスト用のcsvを用意します。

```csv:test.csv
test01,10
test02,20
test03,30
test04,40
test05,50
```

データは、Object Storage(My Projectの画面のData Assetという項目で管理される)に登録しておく必要があるっぽい。

My Projectの画面で、右上の「Find and add data」のアイコン(10 01っぽいやつ)をクリックして、扱いたいファイル(ここではtest.csv)をここにドラッグ&ドロップするか、browseのリンクからファイルを選択し、Applyを押します。
![image_dsx08.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/8d363265-b5ae-f45f-de98-739eb63e7ab7.jpeg)

test.csvがData Assetsに追加されました。
![image_dsx09.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/c69776f4-1bf0-ee47-f9af-81cc77e4606d.jpeg)

Notebook開いて、同じく「Find and Add data」のアイコンをクリックすると、Data Assetsに登録されているファイルがリストされます(この画面からもファイルのアップロードは可能)。扱いたいファイルの「Insert to code」のプルダウンメニューから、Insert Spark RDDを選択します。
![image_dsx10.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/10e94bf4-0775-656f-041c-3d0c3ba06650.jpeg)


そうすると、左側の入力欄に、ペロッとそのデータをアクセスするためのコードが自動生成されます。実行すると、RDDとしてCSVのデータがハンドリングできていることが分かります。
![image_dsx11.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/9a11b70b-9d51-4115-9838-236ad6ae0ac5.jpeg)

## Rコードの実行
同じようにRの実行を試してみます。
R用のNotebookを作成して起動します。
test.csvの「Insert to code」プルダウンメニューから、「Insert SparkSession DataFrame」を選択し、生成されたコードを実行します。
![image_dsx12.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/4ef80950-560b-599e-71e9-566d864cadcc.jpeg)

こんな感じに実行されました。