编者按:灯塔大数据将每周持续推出《从零开始学大数据算法》的连载,本书为哈尔滨工业大学著名教授王宏志老师的扛鼎力作,以对话的形式深入浅出的从何为大数据说到大数据算法再到大数据技术的应用,带我们在大数据技术的海洋里徜徉~每周五定期更新
上期回顾&查看方式
在上一期,我们学习了单词出现行计数的相关内容。PS:了解了上期详细内容,请在自定义菜单栏中点击“灯塔数据”—“技术连载”进行查看;或者滑到文末【往期推荐】查看
No.72
在 Spark 上实现 WordCount
小可 :我记得在学习 Hadoop 时,最基本的一个应用就是 WordCount,我们是不是可以用Spark 来实现 WordCount 呢?
Mr. 王 :当然可以,而且 Spark 版本的 WordCount 比在 Hadoop 下实现更加轻松、容易。
如果在 Python Spark Shell 中使用的话,则输入如下几行代码 :

这段代码就像英文的句子一样好理解吧。第一行,将输入的文件名放在引号中间,让Spark 来识别输入的文件。第二行,定义一个变量 counts,让它等于后面的 MapReduce 的结果,后面我们将文件的每一行以空格为界限划分为单词。第三行,相当于 MapReduce 中的 Map 函数,让 Map 函数每遇到一个单词时,都将其变换成 (word,1) 这样的 key-value 对。第四行,对相当于 WordCount 中 Reduce 功能的一个定义,它会对所收到的键值相同的记录进行合并归约,对相同的 key 根据后面的格式进行变换,也就是将相同的单词所携带的计数加起来合成新的计数。最后一行,将 counts 这个结果输出到 saveAsTextFile 后面的文件中。
小可 :这里有一个符号 lambda,这是什么意思呢?
Mr. 王 :Spark 的基本操作是通过数据单元的变换来完成的,而这个 lambda 是用来标识变换函数的,如何执行变换也跟前面的函数名有关,后面我们还会进行详细介绍。在这里你只要记住 (lambda XXX : YYY) 相当于 (XXX => YYY) 就行,也就是将 XXX 这种格式变换成 YYY格式。
小可恍然大悟 :哦,这样就好理解多了,其实程序就是在不断地执行变换,最后将数据变换成我们所需要的格式。
Mr. 王 :后面我们还会深入地讨论这个问题,现在你可以暂时这样理解。我们先来试试这个程序吧。
小可 :直接输到 Python Spark Shell 里面就可以了吗?
Mr. 王 :是的。打开 Python Spark Shell,只要逐行地输入程序就可以了。

继续逐行地输入下面的程序,记住不要忘记后面的“\”。

有“\”的部分不会直接执行,提示符会变成 3 个点号,以等待后面的连续代码段。

此时已经到达了程序定义的最后一句,不再有“\”。

最后将程序的输出路径设为 result,这样程序就可以开始执行了。






程序执行之后,平台会自动结束。

这时我们可以在目录下查看文件列表,使用 ls 命令 :

我们会发现文件列表中多出了一个 result 文件夹,这个文件夹就是前面程序的输出结果。我们可以使用 cd 命令进入文件夹,并且继续使用 ls 命令查看里面的文件。

小可 :和 Hadoop 很像,里面会出现 Part-00000 和 Part-00001 这样的文件。

Mr. 王 :打开看看,里面就保存着 WordCount 的结果。
下期精彩预告
经过学习,我们研究了在 Spark 上实现 WordCount涉及到的一些具体问题。在下一期中,我们将进一步了解在 HDFS 上使用 Spark的相关内容。更多精彩内容,敬请关注灯塔大数据,每周五不见不散呦!
文章作者:王宏志
文章编辑:天天