sparkとかいうのをちょっと触ってみる その3

前回の続き
最終回。のつもり。
今回の記事ではspark用語"RDD""DAG"についてちょっと解説しておわり。
まずは
RDDってなんじゃ
ということなんだけど
RDDっていうのは変更されないアイテム。
ただし、
代入されない。
これがRDDの特徴。
RDDには実際のデータの代わりに、「これから代入する」という情報が、保存されている
たとえば
val raw = sc.textFile("./sample_transaction.csv")
と書いた時、みんながいつも使ってる言語なら
変数rawのために用意されたメモリ上にsample_transaction.csvの内容が代入される。
けど、sparkでは
val raw = sc.textFile("./sample_transaction.csv")
と書いた時、
「変数rawに、sample_transaction.csvの内容を代入しますよ」という動作が保存される。
このような情報を保存した変数が、RDDってやつらしい。つまり、いちいちアクセス速度の遅い補助記憶装置からデータを取ってこないで、なにかしらアクションを実行するときに初めて持ってくる。

DAGっていうのは、そのRDD同士の依存関係を保存してるグラフのことをいう。
例を挙げて説明してみる。
sample.csvのなかに"100"という数値データが入っていて、それをhogeという名前のRDDに読み込んでいる。そこに
hogehoge = hoge * 2
という処理をする。このときhogehogeは200ではなく、「hogeを2倍した数値」という処理内容が入っている。さらに
hoge3 = hogehoge + 2;
をした時、hoge3は「hogehogeに2を足した数値」になっている。
つまり、hoge3は、「hogeを2倍にした後、2を足した数値」ということになる。このような依存関係のグラフのことをsparkではDAGと呼ぶ。
こうして、いくつかのRDDと、ひとつのDAGが出来上がったあと、reduceByKeyなどをするときに初めて数値計算が行われる。
このように、計算順序を先に作り上げた上で後から演算する様子のことを「遅延評価」というらしい。
DAGを見ることで変数同士の依存関係が明らかになるため、対故障性もいいんだとか。

sparkはこのへんで終わり。ちなみにこの記事は当blog内100番目の投稿らしい。
スポンサーサイト

sparkとかいうのをちょっと触ってみる その2

前回からの続き。
今回やること
1.csv読み込み
2.データ整形
3.集計
4.コンソール出力
5.ファイル出力
適当なcsvファイルを用意しておく。
今回用意したcsvファイル内容はこれ↓

id,transaction_id,name,quantity,price
1,t1,商品1,5,100
2,t1,商品2,3,150
3,t2,商品3,10,210
4,t2,商品4,2,1050
5,t2,商品5,40,80
6,t3,商品6,150,30
7,t3,商品1,10,100
8,t4,商品4,5,1050

この内容で
sample_transaction.csv
とかいうcsvファイルを作った。
作ったディレクトリと同じ場所に移動しておく。
そしてsparkを起動する。私は
spark-shell
で起動した。

sample_transaction.csvを読み込むコマンドはこう
sp1.png 
val raw = sc.textFile("./sample_transaction.csv")
rawという変数(ほんとは変数ではないけど)にsample_transaction.csvの内容が代入できた。

次に、ヘッダを取得しておく。後で取り除くために。
sp2.png 
val head = raw.first()
これで、変数headにcsvファイルのヘッダが代入できた。

ここで、transaction_id,quantity*priceという構成の新しいデータを作りたいとすると、こうすればいい
sp3.png 
val temp = raw.filter(_!=head).map(row=>{
val fields = row.split(",")
(fields(1),fields(3).toInt*fields(4).toInt)
})
これで、tempの中に目標のデータが集まった。

.take(n)を使えば、変数の中身を見れる。
sp4.png 
take(5)なら、上から5行。

最後に、transaction_idごとに集計したければ
sp5.png 
val summary = temp.reduceByKey((x,y)=>x+y)
で、OK。

今作ったsummaryの中身を表示してみる。本来ならデータ数が莫大な可能性があるのであんまりしないほうが良いそうだ。
sp6.png 
summary.foreach(println)
これで中身がどうなってるかわかる。

最後にファイル出力だが、sparkは出力にファイル名ではなくディレクトリ名を指定するらしい。その中に出力されたファイルが入ってる。summaryをresultディレクトリに出力する。
sp7.png 
summary.saveAsTextFile("./result")
これで
sp8.png 
無事resultフォルダ内に出力結果が保存された。

sparkとかいうのをちょっと触ってみる

申し訳ないけど今回の記事はmac向けです。
apache-sparkなるものをインストールして起動してみるまで
Homebrewをインストールしてない人はインストールすること。(適当なリンク)
sparkはterminalからbrewでインストールできる。
こんな感じで↓
spark2.png 
brew install apache-spark
すると、私の場合こんな風に怒られた
spark3.png 
java1.8を入れろということだったのでjava1.8をブラウザからインストールしたが、何も変わらなかった。
仕方なくエラー文を読むと、「これコピペインストールできるよ❤️」なる文言があったのでそのまま貼り付けて実行した。
spark4.png 
brew cask install caskroom/versions/java8
無事インストールされた。brewいっぱいちゅき❤️。
javaが無事インストールされたら、
もう一度
brew install apache-spark
すれば、sparkがインストールできるはず。
spark5.png 
spark-shell
と打ち込むと
spark1.png 
みたいな画面がでてくるので、これで起動できた。
この起動のしかただと、scalaなる言語をつかうことになる。
scalaで起動したあと、閉じ方がわからなかったので、私は
control+c
で、インタラクティブシェルを閉じた。
pythonなる言語を使ってsparkを使いたいなら、
spark7.pngpyspark
と打てばpythonで動かせる。
pythonのほうの終了方法は、
>>>exit()
と打つだけ。

わー!

この記事はブロとものみ閲覧できます

名前

この記事はブロとものみ閲覧できます
プロフィール

すぺくとる

Author:すぺくとる
ウディタ・Unity・UE4などなど。
MUGEN関連製作物等々は下の方の”星屑の倉庫”に置いてあります。好きに持って帰っていいですよ。
改変転載は要相談ということで。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
カウンター
現在の閲覧者数
現在の閲覧者数:
カーソルに数字を入れるだけでページジャンプできますよ~

Presented by Asondara Nakamada. hen Game
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR