LoginSignup
19
17

More than 5 years have passed since last update.

Apache Spark ことはじめ(Scala版)

Posted at

事前準備

CentOS 6 でやります。

  • CDH 5 をインストール
  • hadoop の立ち上げ
  • Spark のインストール、立ち上げ

までやっておきます。

  • Spark 用ユーザの作成
shell
$ sudo useradd hoxom_spark
$ sudo usermod -a -G wheel hoxom_spark
$ sudo passwd hoxo_spark
  • HDFS 上に作業用フォルダを作成
shell
$ sudo -u hdfs hadoop fs -mkdir -p /user/hoxom_spark
$ sudo -u hdfs hadoop fs -chown hoxom_spark /user/hoxom_spark
  • HDFS の作業フォルダにファイルをコピー
shell
$ sudo cp /home/hoxom/tracking_log/tracking.2014-12-02.log.gz /home/hoxom_spark/
$ su - hoxom_spark
$ hadoop fs -put /home/hoxom_spark/tracking.2014-12-02.log.gz /user/hoxom_spark/tracking.2014-12-02.log.gz
$ hadoop fs -ls /user/hoxom_spark  # HDFS 上にファイルが存在することを確認
結果
Found 1 items
-rw-r--r--   1 hoxom_spark supergroup   32438207 2014-12-24 11:40 /user/hoxom_spark/tracking.2014-12-02.log.gz

Spark

参考サイト

Spark シェルの起動

$ spark-shell
結果
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 1.1.0
      /_/

Using Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_65)
Spark context available as sc.
scala>

Spark context オブジェクト sc ができるので、これを使います。

  • ファイルの読み込み
Scala
val file = sc.textFile("hdfs://localhost/user/hoxom_spark/tracking.2014-12-02.log.gz")
file.count // 行数を出力
結果
963021
  • カラムに分割
Scala
val lines = file.map(_.split("\t"))
lines.count      // 行数
lines.first.size // カラム数
結果
963021
9
  • スマートフォンからのアクセスのみ抽出
Scala
val sp = lines.filter(_.contains("SP"))
sp.count
結果
402659
  • 結果をメモリ上にキャッシュする
Scala
val sp_dm = sp.filter(_(4).startsWith("DM"))
sp_dm.cache()
sp_dm.count
結果
196805

同じ計算をもう一度。

Scala
sp_dm.count
結果
196805

二回目はめっちゃ速い!

  • キャッシュから削除
Scala
sp_dm.unpersist()
  • 端末ごとの PV を集計
Scala
val pv_by_terminal = lines.map(line => (line(7), 1)).countByKey
pv_by_terminal.foreach(item => println(item._1 + "\t" + item._2))
結果
PC      530430
MB      29932
SP      402659
19
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
17