バツイチとインケンのエンジニアブログ
プログラムやプログラムじゃないこと

ScalaMatsuri2018 トレーニングDAY でお話させて頂きました

2018-03-16
書いた人 : バツイチ
カテゴリ : scala | タグ : ScalaMatsuri, ScalaMatsuri2018

2018年3月16日(金)に行われたScalaMatsuri2018トレーニングDAYでビッグデータについてお話させて頂きました。
ビッグデータで弱小卓球部を強くしよう!というふざけた内容です。

逆引き!Scala x ビッグデータ from x1 ichi

行ったデモの内容

ストリーミング・データ

Apache Zeppelinでデータの取得〜可視化まで行います

依存のロード

%spark.dep
z.reset()
z.load("org.apache.spark:spark-sql-kafka-0-10_2.11:2.2.0")
z.load("mysql:mysql-connector-java:6.0.6")

バージョン確認

%spark
scala.util.Properties.versionString
spark.version

JSONをパースする構造体をcase classで作成

%spark
import org.apache.spark.sql.{Encoder, Encoders}

case class Track (
    id: Long,
    player: String,
    speed: Double,
    x: Double,
    y: Double,
    z: Double,
    time: java.sql.Timestamp
)

作成したcase classからEncoderを作成する

%spark
// スキーマを取得することができたり、json.read時に文字列をパースすることができます。
val encoder = Encoders.product[Track]
print(encoder)

kafkaからリアルタイムデータを取得して、JSONをDataSetに展開します

%spark
val ds = spark
  .readStream
  .format("kafka")
  .option("kafka.bootstrap.servers", "10.146.0.3:9092,10.146.0.5:9092,10.146.0.6:9092")
  .option("startingOffsets", "latest")
  .option("subscribe", "takkyu")
  .load()
  .select($"value" cast "string" as "json")
  .select(from_json($"json", encoder.schema) as "takkyu")
  .select("takkyu.*")

Kafkaから取得したデータをメモリに書き出し続けます

%spark
val query = ds
  .writeStream
  .queryName("takkyu_table")
  .format("memory")
  .start()

メモリに展開したデータを抽出します

%sql
select * from takkyu_table limit 1000

MySQLから部員情報(マスタ)を取得します

%spark
spark.read
  .format("jdbc")
  .option("url", "jdbc:mysql://10.146.0.11:3306/takkyu?useUnicode=true&characterEncoding=utf8")
  .option("dbtable", "buin")
  .option("user", "******")
  .option("password", "******")
  .load()
  .select("*")
  .createOrReplaceTempView("buin")

MySQLから取得したマスタとKafkaから取得したストリーム・データをJOINします

%sql
select
  t.player,
  b.kikiude,
  t.speed,
  t.x,
  t.y,
  t.z
from
  takkyu_table as t
  left join
    buin as b
    on b.name = t.player
order by
  t.id desc

例えば、利き腕別のスピード平均をグラフ化したりできます。

このエントリーをはてなブックマークに追加
Tweet

← Amazon Lightsailで簡単にサーバーを構築する
Rust から GCP のマネージド・サービスを使う →

 

最近書いた記事

  • Ryzen7 3800XT でmini ITXオープンフレームPCを作る
  • Pythonで機械学習入門 競馬予測
  • HP ENVY 15 クリエイターモデルレビューとRAID0解除
  • JRA-VAN データラボを使って、競馬データを収集する
  • Surface Pro 3 にubuntu18.04を入れる

カテゴリー

  • Android
  • Apache Flink
  • API
  • AWS
  • bazel
  • BigQuery
  • Cassandra
  • Docker
  • Druid
  • Elasticsearch
  • Git
  • Golang
  • gradle
  • HDFS
  • JavaScript
  • jvm
  • Linux
  • MongoDB
  • MySQL
  • Nginx
  • Nodejs
  • PaaS
  • PHP
  • Python
  • RabbitMQ
  • Raspberry Pi
  • React Native
  • Redis
  • Riak
  • rust
  • scala
  • Scheme
  • SEO
  • solr
  • Spark
  • spray
  • Sublime Text
  • Swift
  • Tableau
  • Unity
  • WebIDE
  • Wordpress
  • Youtube
  • ひとこと
  • カンファレンス
  • スケジューラ
  • マイクロマウス
  • 広告
  • 技術じゃないやつ
  • 株
  • 機械学習
  • 競馬
  • 自作キーボード
  • 自然言語処理

アーカイブ

  • 2021年4月
  • 2021年2月
  • 2021年1月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年10月
  • 2019年9月
  • 2019年8月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年11月
  • 2018年9月
  • 2018年5月
  • 2018年3月
  • 2018年2月
  • 2017年9月
  • 2017年8月
  • 2017年6月
  • 2017年4月
  • 2017年3月
  • 2017年1月
  • 2016年10月
  • 2016年9月
  • 2016年8月
  • 2016年6月
  • 2016年5月
  • 2016年4月
  • 2016年3月
  • 2016年2月
  • 2016年1月
  • 2015年12月
  • 2015年11月
  • 2015年10月
  • 2015年9月
  • 2015年8月
  • 2015年6月
  • 2015年5月
  • 2015年2月
  • 2015年1月
  • 2014年12月
  • 2014年11月
  • 2014年9月
  • 2014年6月
  • 2014年5月
  • 2014年3月
  • 2014年2月
  • 2014年1月
  • 2013年12月
  • 2013年11月
  • 2013年10月
  • 2013年9月
  • 2013年8月

書いた人

  • バツイチちゃん
  • インケンくん

このブログについて

エンジニアとしての考え方が間逆な2人がしょーもないこと書いてます。

バツイチ

アイコン

IT業界で働くエンジニアです。名前の通りバツイチです。
理論や抽象的概念が好きだけど人に説明するのが下手。

インケン

アイコン

バツイチちゃんと同じ業界で働いています。
理論とか開発手法とかは正直どうでもよくて、
生活する上で役に立つことに使いたい

Copyright 2025 バツイチとインケンのエンジニアブログ