Apache Spark 学習1

Apache Spark について、技術を身につけなくては

いけなくなったので、学習メモを残していこうと思います。

まず、 Apach Sparkとは、並列分散処理を行うことにより、

プログラムの実行速度を速める効果が得られるフレームワークです。

言語としては、Java、Scala、Rを使用できます。

インタレクティブな環境も存在するので、そのメモがメイン

になっています。

これから、学習しようと思う人は、Apache Sparkを動作

できる環境を整えてくださいね!


  • Apache Spark の起動

//  ルートへ移動

cd spark-sample-app/

// Apache Spark 起動

${SPARK_HOME}/bin/spark-shell --master local


  • Apache Spark のバージョンチェック

// バージョンチェック

${SPARK_HOME}/bin/spark-submit --version


サンプルを読む前に、RDDとは、Apache Sparkを使用するための

データの形である。Apache Sparkを使用するためには、データを

RDDへ変換する必要がある。

  • サンプルソースを読む

サンプル1では、データを読み込んで、ファイルに含まれる

語句が何回呼ばれているかを集計するプログラムです。

//  データ読み込み

val textRDD = sc.textFile("/simple-words.txt")

// 配列に変換

val textArray = textRDD.collect

// 結果を出力

textArray.foreach(println)

// フィルター用関数の宣言 

val isWord: String => Boolean = word => word.matches("""\p{Alnum}+""")

// フィルタを設定し、RDDを作成

val wordRDD = textRDD.filter(isWord)

// 配列に変更

val wordArray = wordRDD.collect

// 結果を出力

wordArray.foreach(println)// mapのRDDを作成

val wordAndOnePairRDD = wordRDD.map(word => (word,1))

// 配列に変更

val wordAndOnePairArray = wordAndOnePairRDD.collect

// 結果を出力

wordAndOnePairArray.foreach(println)

// Keyの集計結果を計算

val wordAndCountRDD = wordAndOnePairRDD.reduceByKey((result,elem) => result + elem)

// 配列変換

val wordAndCountArray = wordAndCountRDD.collect

// 結果を出力

wordAndCountArray.foreach(println)


サンプル2

README.rdから語句の総数を集計する。

val textRDD = sc.textFile("/spark-sample-app/README.md")

val textArray = textRDD.collect

textArray.foreach(println)

// 一行の文字を分解してRDDに変換する

val wordCandidateRDD = textRDD.flatMap(_.split("[ ,.]"))

val wordCandidateArray = wordCandidateRDD.collect wordCandidateArray.foreach(println)

val wordRDD = wordCandidateRDD.filter(_.matches("""\p{Alnum}+"""))

val wordAndOnePairRDD = wordRDD.map((_,1))

val wordAndCountRDD = wordAndOnePairRDD.reduceByKey(_ + _)

val wordAndCountArray = wordAndCountRDD.collect

wordAndCountArray.foreach(println)

// マップのKeyとValueを入れ替える。

val countAndWordRDD = wordAndCountRDD.map { wordAndCount => (wordAndCount._2, wordAndCount._1)}

// Key の降順へ並び替える。

val sortedCWRDD = countAndWordRDD.sortByKey(false)

// 変換したのを元に戻す。

val sortedWCRDD = sortedCWRDD.map { countAndWord => (countAndWord._2 ,countAndWord._1)}

val sortedWCArray = sortedWCRDD.collect sortedWCArray.foreach(println)

// 配列の前から三つを取り出す。

val top3WordArray = sortedWCRDD.take(3) top3WordArray.foreach(println)


今日は、ここまで

なんとなく使用方法がわかってきた。

RDDに変換して、mapやsortを使用してRDDを加工して

collectで配列に変換して出力する。


  • 雑談

今日は、鳩よけの蛇のフィギュアを置いたけど、

少ししか効果でず。残念。

何か考えますよー

今、住んでるとこは、壁薄いからさっさ引っ越したいな。

金を貯めよう。

明日は、部屋の掃除やな。

綺麗好きになろう。

Apache Spark も適度に勉強するかな

管理者オススメのアプリ

簡単に日々のスケジュールを管理できる無料のphoneアプリです。
スケジュール、シフト管理、TODO,お小遣い管理、メモなどいろいろ使用できるアプリ。
メニューの並び替えも自由!


すごい手帳を使ってみる

アクセス数: 無料カウンター




トラックバック(0)

トラックバックURL: http://smartwolf.sakura.ne.jp/Blog/mt-tb.cgi/212

コメントする

ウェブページ

Powered by Movable Type 5.2.7