Luxoft Trainingã®ãã¬ãŒããŒã§ããNazari Shimanskyã¯ãScalaèšèªã®éçºã«å€å€§ãªè²¢ç®ãããæåãªéçºè
ã§ããJulian Dragosã«ã€ã³ã¿ãã¥ãŒããŸããã ã€ã³ã¿ãã¥ãŒã®ç¿»èš³ã«ç²ŸéããŠãã ããã
Yulinanã¯2004幎ããScalaèšèªãå匷ããŠãããåæã«ããŒã¶ã³ãé£éŠå·¥ç§å€§åŠã®Martin Oderskyã®ç 究宀ã§åãå§ããŸããã 圌ã¯ãJavaä»®æ³ãã·ã³ã®ããã¯ãšã³ããšãã€ãã³ãŒããªããã£ãã€ã¶ãŒãäœæããã³ã³ãã€ã©ã®ããŸããŸãªéšåã«ãåãçµã¿ãŸããã ããã«ãJulianã¯Scalaã®åç¹åãå®è£
ããŸããã
2010幎ããžã¥ãªã¢ã³ã¯ããŒã¶ã³ãé£éŠå·¥ç§å€§åŠã§å士å·ãååŸããŸããã Typesafeã®èšç«ä»¥æ¥ãScalaèšèªã®äœæè
ã§ããMartin Oderskyã¯ãéçºããŒã«ãéçºããŠããŸããïŒç¹ã«ãScalaã®Eclipseãã©ã°ã€ã³ãäœæããŸããïŒã ãã®åŸãLightbendïŒä»¥åã®TypesafeïŒã®Sparkã°ã«ãŒããçããŠããã®ãããžã§ã¯ãã®éçºã«å€§ããè²¢ç®ããŸããã ããã«ã圌ã¯ãã¬ãŒãã³ã°ã³ãŒã¹ãå®æœããã¯ã©ã€ã¢ã³ããSparkãããžã§ã¯ããå®è£
ããã®ãæ¯æŽããŠããŸãã
èš±å¯ãåŸãŠè¡ããã翻蚳ãšåºç
NSïŒããã«ã¡ã¯ããžã¥ãªã¢ã³ã ç§ã®ååã¯ãã¶ãªãŠã¹ã»ã·ãã³ã¹ããŒã§ãã
JDïŒããã«ã¡ã¯ã
NSïŒç§ã¯Luxoftã§ãã¬ãŒãã³ã°ã»ã³ã¿ãŒã®ãšã³ãžãã¢ããã³ãã¬ãŒããŒãšããŠåããŠããŸãã ç§ãã¡ã¯ããªããšè©±ãæ©äŒãæã£ãŠããããšãå¬ããæããŸãã ããªããšMartin Oderskyãé·ãéScalaããã£ãŠããããšãç¥ã£ãŠããŸãã ãã®èšèªã䜿çšãã¹ããããžã§ã¯ãã¯äœã ãšæããŸããïŒ
JUDïŒãŸããæåŸ
ããŠãããŠããããšãã ç§ã¯ããªããšè©±ãããšãéåžžã«å¬ããæããŸãã Scalaã®äœ¿çšã«é¢ããŠã¯ã2幎åããã®èšèªã¯ã¢ããªã±ãŒã·ã§ã³ã®ãµãŒããŒåŽãã€ãŸãçŸåšJavaãåºã䜿çšãããŠããããã°ã©ãã³ã°ã«æé©ã§ãããšçããŸãã ãããã£ãŠãJavaä»®æ³ãã·ã³ã§å®è¡ãããã¢ããªã±ãŒã·ã§ã³ã«ã¯ãScalaèšèªãæé©ã§ãã åæã«ãã¯ã©ã€ã¢ã³ãéšåã¯é€å€ãããŸããã ãåç¥ãããããŸããããéå»2幎éã§Scalaã³ãŒãã®æ°ããã³ã³ãã€ã©ãŒã䜿çšãããŠããŸããScalaJSã¯ãScalaã§æžãããããã°ã©ã ãJavaã¹ã¯ãªããã§ã³ã³ãã€ã«ãããã©ãŠã¶ãŒã§å®è¡ã§ããããã«ããŸãã ãã®ã¢ãããŒãã¯éåžžã«æåããŠããŸãã ããã§ãçããå€ããŠãScalaã¯ã¢ããªã±ãŒã·ã§ã³ã®ã¯ã©ã€ã¢ã³ãéšåãšãµãŒããŒéšåã®äž¡æ¹ã«é©ããŠãããšèšããŸãã ããã¯ãã¢ããªã±ãŒã·ã§ã³ã®äž¡åŽã§äœ¿çšå¯èœãªèšèªãšã¹ãã«ã䜿çšã§ãããããéåžžã«åŒ·åãªçµã¿åããã§ãã
ãããããä»æ¥ã®Scalaã¯ãCãé垞䜿çšããããã³ãã³ãã©ã€ã³ãŠãŒãã£ãªãã£ã䜿çšãããããJavaä»®æ³ãã·ã³ã®èµ·åæéãåé¡ã«ãªãå¯èœæ§ã®ãããããæ·±ãã·ã¹ãã ããã°ã©ãã³ã°ã«ã¯ããŸãé©ããŠããŸããã
ããã«ãScalaãåºã䜿çšãããŠããæ°ããåéãçŸåšæŽ»çºã«éçºãããŠããŸã-ããã¯ããã°ããŒã¿ïŒBigDataïŒã§ãã ãããŠããããä»æ¥ã®äŒè©±ã®çç±ã®äžã€ã ãšæããŸãã Scalaã¯ãããŒã¿ã®æäœã«ç¹ã«é©ããé¢æ°åèšèªã§ãããSparkãœãããŠã§ã¢ãã©ãããã©ãŒã ã®ãããã§ãScalaã¯ããã°ããŒã¿åŠçã®åéã§äœ¿çšãããŠããŸãã çµè«ãšããŠãããã3ã€ã®åéãScalaã«ãšã£ãŠæãææã§ãããšèšããã§ãããã ããã¯æ±çšããã°ã©ãã³ã°èšèªã§ããããã¡ãããä»ã®å€ãã®åéã§äœ¿çšã§ããŸãã
NSïŒ Sparkãšèšãã°ãSparkã¢ããªã±ãŒã·ã§ã³ã®äœæã«ã©ã®èšèªã䜿çšããããšããå§ãããŸããïŒ
JDïŒãŸããScalaãéžæããŸãã ããã«ã¯ããã€ãã®çç±ããããŸãã ãŸããScalaã¯ãç¹ã«äžŠååŠçãšå¯äœçšã®ãªãããŒã¿åŠçã®ã³ã³ããã¹ãã§ãããŒã¿ãæ±ãã®ã«æé©ã§ãã 2çªç®ã®çç±ã¯ãSparkãã©ãããã©ãŒã èªäœãScalaã䜿çšããŠéçºãããããšã§ãã ãããã£ãŠããã¹ãŠã®æ°ããæ©äŒã«ã¢ã¯ã»ã¹ã§ããŸãã Sparkã§æ°ãã衚瀺ããããã®ã¯ãã¹ãŠScalaèšèªã§æåã«äœ¿çšå¯èœã«ãªããããªãé·ãæéãçµãŠåããŠSparkããŒã ãä»ã®èšèªã§æ°ããAPIãæäŸããŸãã ãã©ãããã©ãŒã èªäœãéçºãããŠããã®ãšåãèšèªã䜿çšããå Žåãåžžã«äœããã®å©ç¹ãããããã«æããŸãã Pythonã¯ãããŒã¿åŠçã®å°é家ã«ãšã£ãŠãç¹ã«Pythonãç¹ã«ç 究ããŠããå Žåã«æé©ãªéžæè¢ã ãšæããŸãã PythonãçŽç²ã«ç 究ã¢ããªã±ãŒã·ã§ã³ã«äœ¿çšããããšããå§ãããŸããå®æåãéçºããå¿
èŠãããå Žåã¯ãScalaã䜿çšããããšããå§ãããŸãã
NSïŒããããšãã æ¥ã«ãã·ã¢ã§ã»ãããŒãéå¬ããäºå®ãããããšãç¥ã£ãŠããã®ã§ããããžã§ã¯ãã§ã©ã®ã¯ã©ã¹ã¿ãŒãããŒãžã£ãŒã䜿çšãããã¬ãŒãã³ã°äžã®ãã¢ã³ã¹ãã¬ãŒã·ã§ã³ã«äœã䜿çšããŸããïŒ
JUDïŒã¯ããçŽ æŽããã質åã§ãã ç§ã¯éåžžMesosã䜿çšããŸãã ããã¯æ±çšã®ã¯ã©ã¹ã¿ãŒãããŒãžã£ãŒã§ãããè² è·ãçµåã§ããããããã®ã·ã¹ãã ãæ°ã«å
¥ã£ãŠããŸãã ããšãã°ã瀟å
ã§äœ¿çšãããŠããä»ã®ã¢ããªã±ãŒã·ã§ã³ãšåæã«Sparkã¿ã¹ã¯ãå®è¡ã§ããŸãã ããã«ãMesosã·ã¹ãã ã¯é²åããŠããŸãã ããã¯ãåãç 究宀ã§ãSparkãã©ãããã©ãŒã ãäœæãããããŒã¯ã¬ãŒå€§åŠã§éå§ãããæ°ãããããžã§ã¯ãã§ãã ãããã£ãŠãäžçš®ã®çžä¹å¹æããããŸãã ã»ãããŒã«ã€ããŠã¯ããã£ã1æ¥ã§å€ãã®ããšã話ãããšãã§ããã®ã§ãSparkã®ããŒã«ã«ãªãªãŒã¹ã䜿çšããŸãã ã»ãããŒåå è
ã¯ãã€ã³ã¹ããŒã«ãæåããå®äºããSparkã¿ã¹ã¯ãèµ·åããŠãäœæ¥ã®çµæããã°ãã確èªã§ããŸãã
NSïŒãããŠãSpark APIã¯ãã¬ãŒãã³ã°äžã«äœã«çŠç¹ãåãããŸããïŒ
JDïŒãã£ãäžæ¥ãããããŸããã®ã§ãåºæ¬çãªããšã«ã€ããŠäž»ã«è©±ããŸãã ãªã¹ããŒãSparkã®ä»çµã¿ãããç解ãããšãä»ã®ã©ã€ãã©ãªã«ç°¡åã«åãæ¿ããããšãã§ãããšæããŸãã 質åã«çŽæ¥åçããå Žåã¯ãRDD APIã«å€ãã®æéãè²»ãããèå°è£ã§äœãèµ·ãã£ãŠããã®ãã説æããŸãã åºæ¬çãªæŠå¿µãæ€èšããã®ã§ãé«ã¬ãã«APIã«é²ãããšãã§ããŸãã Spark SQLãç解ããããšã¯ç¹ã«éèŠã§ãã ããã§ãããã2ã€ã®ããšã«çŠç¹ãåœãŠãŸãã
NSïŒããããšãã Sparkã§ãµããŒããããŠããããŒã¿åœ¢åŒããã€ãã©ã®ããã«äœ¿çšããå¿
èŠãããã®ãââäŸã瀺ãäºå®ã¯ãããŸããïŒ
JUDïŒãã¡ããã ããŒã¿ã®ååŸãšåŠçã®ããã»ã¹ãã€ãŸããç¹ã«Spark SQLããSparkã«èªã¿æžãã§ããããŒã¿ã®ã¿ã€ãã«ã€ããŠèª¬æããŸãã ãã®è³ªåã¯ãã³ãŒã¹ã®åŸåã§æ€èšããŸãã
NSïŒã¹ããªãŒãã³ã°ãGraphXãæ©æ¢°åŠç¿ãªã©ã®Sparkã¢ãžã¥ãŒã«ã«ã€ããŠã©ãæããŸããïŒ ãã¬ãŒãã³ã°äžã«ãããã«ã€ããŠè©±ãã€ããã§ããïŒ
JDïŒã¯ãããã¡ããããããã«ã€ããŠã話ããŸãããå®è·µçãªæŒç¿ã¯è¡ããŸããã ãããã®ã¢ãžã¥ãŒã«ã¯éåžžã«éèŠã§ãã 第äžã«ãææ¡ãããã¢ã«ãŽãªãºã ããã³æ©èœã«é¢ããŠã第äºã«ãSparkãRDDãã«ãã£ã³ã°ãããã¯ãšã©ã®ããã«æ©èœãããã瀺ããŠããããã§ãã ãããã®ãããã¯ã¯ãé«ã¬ãã«ã®ã¢ããªã±ãŒã·ã§ã³ãšãµãŒãã¹ãäœæããããã«äœ¿çšãããŸãã
Spark Streamingã¢ãžã¥ãŒã«ã¯éåžžã«èå³æ·±ããããžã§ã¯ãã§ãããããŒã¿ã¹ããªãŒã ãåç¬ã§åŠçããæè¡ã¯ããã§ã«ååãªæ¢è£œã®ãœãªã¥ãŒã·ã§ã³ãšã©ã€ãã©ãªãååšããéåžžã«ç«¶äºã®æ¿ããç°å¢ã«ãããŸãã
Spark StreamingãAPIãå€æŽãããããã©ã®ããã«çºå±ãããã«ã€ããŠç¬èªã®ããžã§ã³ãæã£ãŠããããšãç¥ã£ãŠããã®ã§ãç§ã¯ééããªãããã«åŸãããšã«ããŸãã æ©æ¢°åŠç¿ã¢ãžã¥ãŒã«ãéåžžã«èå³æ·±ããã®ã§ããçŸåšãå€ãã®äººãããã°ããŒã¿ã«åŸäºããŠãããããŒã¿åŠçã·ã¹ãã ã§æ©æ¢°åŠç¿ã¢ã«ãŽãªãºã ãšæ¹æ³ã䜿çšãããããã§ãã
ãã®ã¢ãžã¥ãŒã«ã«ã€ããŠã¯ãå®éã®ã¢ããªã±ãŒã·ã§ã³ã«ãšã©ãŸãããšãªãç°¡åã«èª¬æããŸãã å
ã»ã©èšã£ãããã«ããã®ãã¬ãŒãã³ã°ã§ã®ç§ã®ç®æšã¯ãåŠçã«Sparkãã©ã®ããã«æ©èœãããã«ã€ããŠã®ç解ãšã¡ã³ã¿ã«ã¢ãã«ãæäŸããããšã§ãã å°æ¥Sparkãå¿
èŠã«ãªã£ãå Žåã圌ãã¯ãã®ã·ã¹ãã ããã詳现ã«ç¬èªã«ç 究ããããšãã§ããŸãã
NSïŒããã°ããŒã¿ã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ãšãµãŒãã¹ãæäŸãããããã«Sparkãå«ãããã³ããŒã«ã€ããŠã©ãæããŸããïŒ ããªãã®æèŠã§ã¯ããã®ãããªææ¡ã®é·æãšçæã¯äœã§ããïŒ
JDïŒãã®ãããªææ¡ã¯ããªãåãå
¥ãããããšæããŸãã ç§ã¯ããããã¹ãŠããªããã©ããªçš®é¡ã®ããžãã¹ãçºå±ãããŠãããã«äŸåãããšèšãã§ãããã ããšãã°ãå°å
ã®éœåžæ°èãçºè¡ããŸãã æ®å¿µãªãããæ°èã¯ä»ãéå»ã®ãã®ã§ãã ãŸããããã°ããŒã¿ãæ±ããããžãã¹åãã®è£œåãéçºããããŒã ã®ããã®è³éããããŸããã ãã®å Žåãå®æåãæäŸããåçšãµãŒãã¹ã䜿çšããããšã¯çã«ããªã£ãŠããŸãã
ãã ããããžãã¹ã§ããã°ããŒã¿ãéèŠãªåœ¹å²ãæãããŠããå Žåã¯ãããããç¬èªã®éçºããŒã ãå¿
èŠã§ãã å®éãããªãã®ã³ã¢ããžãã¹ãã©ãã ãããã°ããŒã¿ã«é¢é£ããŠãããã«äŸåããŠãããšæããŸãã
NSïŒã©ããããããšãã ãããã¯ãã¹ãŠç§ãããªãã«å°ãããã£ã質åã§ãã
JUDïŒããããšãã
Julian Dragosã®ãã¹ã¿ãŒã¯ã©ã¹ã¯4æ6æ¥ã«ã¢ã¹ã¯ã¯ã§éå¬ãããScalaèšèªã§ã®Apache Sparkã¢ããªã±ãŒã·ã§ã³ã®éçºã«å°å¿µããŸãã 詳现ã¯ãã¡ãã