对spark和scala的进一步学习

来源:互联网 发布:南京市网络问政平台 编辑:程序博客网 时间:2024/05/19 06:37

在完成尹老师最初给我们布置的基于spark streaming的logistic学习后,我们与尹老师进行了一定的交流。尹老师主要对前期工作的提出了一些意见,如scala程序不规范、对广义线性模型理解不够透彻等问题。我们自己在编程的过程中也发现由于对scala和spark的知识理解的过少,写程序的时候捉襟见肘。因此,尹老师通过邮件给我们发了很多学习材料,希望我们借这个机会深入的学习scala编程语言和spark的运行机制,这样,写出来的程序才能正确运行并且符合规范。

这一周我们也主要是学习了尹老师给我们的材料,商讨下一阶段的任务,本博文中将简要介绍我们这周学习的内容。

1、小象学院上尹老师的《spark上机器学习方法的模式与性能》课程

上面的视频链接如下(http://www.chinahadoop.cn/course/41),这个课程是尹老师在小象学院开课的视频,可以免费观看。

MLlib是spark中的一个机器学习的组件,课程中详细介绍了MLlib的组成框架,如下图所示。

尹老师特别强调了scala语言的表达能力比较强,因此看spark的程序往往比较简洁,但是并不是简单易懂,因此,尹老师基于spark里面的开源的MLlib代码对几个机器学习的代码进行了简要讲解,如SVM、linear Regression、决策树等。

课程中还对spark runtime进行了详细地讲解,如下图所示。

在启动spark程序的时候,master和worker都运行起来了,执行程序的地方叫做driver,driver会向master请求计算资源,master通知worker给driver计算资源叫做executor,这样driver和executor可以相互交互进行程序计算。

接下来,尹老师对spark里面最重要的概念RDD进行了讲解,因为spark的特点就在于RDD这个底层的数据结构提供了数据共享支持。关于RDD的介绍详见链接(http://shiyanjun.cn/archives/744.html),这篇链接是一个人翻译的berkeley的文章“ResilientDistributed Datasets: A Fault-Tolerant Abstraction for In-Memory ClusterComputing”的,写的挺不错。


2、github上尹老师“Spark Internals:Deploy, Scheduling and RDD”博文

本博文看起来写得比较诙谐,但是理解还是有点难度,对于我们这种初学者来说很多概念都没搞懂,但还是坚强地把它看完了,文章主要讲的是spark-submit运行的时候的机器内部的运行机制。

里面主要涉及了几个概念Driver、Master、worker、Executor。

另外SparkContext是其中一个很重要的变量,我们写出来的spark程序能进行分布式计算的最源头就在于我们写下了sc = new SparkContext()。后期我们读入的数据,spark会自动地分布式地存储在RDD中。

 

3、spark的Scala语言编程规范

这一部分的链接见:https://cwiki.apache.org/confluence/display/SPARK/Spark+Code+Style+Guide。

里面主要提到了如下几点

① 一般的函数缩进占用两个空格符,在函数中对变量的定义建议用4个空格进行缩进,见下图

②括号的用法,在占用多行的if/else语句中加入花括号,仅占用一行的if/else语句不建议用花括号,如下图所示。


4、coursera上scala语言的课程

这一部分的链接见https://class.coursera.org/progfun-004。

这个课程是scala语言的发明者Martin Odersky讲授的scala课程,讲解非常清晰易懂,对scala语言的学习帮助非常大。


0 0
原创粉丝点击