![Page 1: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/1.jpg)
DMM.COM SPARK
![Page 2: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/2.jpg)
2015/4 - DMM labo
API
![Page 3: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/3.jpg)
AGENDADMM Apache Spark DMM Tips
![Page 4: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/4.jpg)
DMM
![Page 5: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/5.jpg)
DMM
![Page 6: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/6.jpg)
![Page 7: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/7.jpg)
![Page 8: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/8.jpg)
SPARK
UC Berkekey Apache
Scala, Python, Java, SQL, R API
![Page 9: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/9.jpg)
![Page 10: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/10.jpg)
(2014/09)Mahout
SparkJava, Scala, Python
GraphLab
![Page 11: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/11.jpg)
![Page 12: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/12.jpg)
WHY SPARK
MLlib, GraphX
Hadoop
![Page 13: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/13.jpg)
Hadoop
![Page 14: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/14.jpg)
item to item
user to item
popular
![Page 15: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/15.jpg)
1. (Tracking API)
2. (Hive on Spark)
3. (Spark)
4. (Sqoop)
5. API(Play)
![Page 16: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/16.jpg)
(TRACKING API)Javascript
API
RDB Hadoop
![Page 17: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/17.jpg)
(HIVE ON SPARK)Spark
![Page 18: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/18.jpg)
(SPARK - ITEM2ITEM)
![Page 19: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/19.jpg)
val itemToItems = userProducts.join(userProducts).filter { case (user, ((item1, keyword1, score1), (item2, keyword2, score2))) => item1 != item2}.map { case (user, ((item1, keyword1, score1), (item2, keyword2, score2))) => ((item1, keyword1, item2), score1 * score2)}.reduceByKey(_ + _).mapValues(math.sqrt(_)).map { case ((item1, keyword1, item2), score) => ((item1, keyword1), (item2, score))}.groupByKey().mapValues(_.toList.sortBy(_._2).reverse.take(config.numDisplayItems)).filter { case ((item1, keyword1), items) => items.size >= config.numDisplayItems}.cache()
![Page 20: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/20.jpg)
(SPARK -USER2ITEM)
MLlib ALS( )
![Page 21: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/21.jpg)
val model = ALS.train(ratings.map(_._1), config.alsRank, config.alsNumIterations, config.alsLambda) val predictions = model.predict(candidates).groupBy(_.user).map { case (user, ratings) => (user, ratings.toList.sortBy(_.rating) .reverse.take(config.numDisplayItems)) }.cache()
![Page 22: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/22.jpg)
(SPARK)RDB Hadoop
![Page 23: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/23.jpg)
Sqoop MariaDB
![Page 24: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/24.jpg)
API item2item(id: ItemId): List[ItemId]user2item(id: UserId): List[ItemId]popular : List[ItemId]
![Page 25: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/25.jpg)
DEPLOY AND EXECUTE
Jenkins + Build Pipeline + BuildFlow
![Page 26: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/26.jpg)
(2015/09)Jenkins + Build Pipeline + BuildFlow
Job Script + Git
Hive
Spark
Sqoop
Recommend API(Node.js)
MariaDB(Galera Cluster)
![Page 27: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/27.jpg)
Jenkins + Build Pipeline + BuildFlow
Job Script + Management API
Hive on Spark
Spark
Sqoop
Recommend API(Play)
MariaDB(Galera Cluster)
![Page 28: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/28.jpg)
Management API
File
Hive on Spark
Hive 3
Play
Spark, Hive UDF Util
![Page 29: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/29.jpg)
![Page 30: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/30.jpg)
AB PDCA
![Page 31: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/31.jpg)
[ ]
![Page 32: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/32.jpg)
701
![Page 33: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/33.jpg)
75 % ↑ 97% ↑
![Page 34: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/34.jpg)
TIPS
use dataframes or datasetshive
![Page 35: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/35.jpg)
executor
memoryOverhead
cheat sheet
Top 5 Mistakes to Avoid When Writing Apache Spark
Applications
![Page 36: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/36.jpg)
![Page 37: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/37.jpg)
HIVE
Spark
HiveContext
Hive on Spark
![Page 38: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/38.jpg)
DATAFRAMES DATASETS (1.3 - ) Dataframes(1.6 - ) Datasets
Project Tungsten(1.5 - )
![Page 39: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/39.jpg)
![Page 40: DMM.com ラボはなぜSparkを採用したのか? レコメンドエンジン開発の裏側をお話します](https://reader034.vdocuments.mx/reader034/viewer/2022050614/587fa5041a28ab825e8b6af7/html5/thumbnails/40.jpg)
Realtime RecommendDataframes & DatasetsGraphframes