感受下在spark上构建一个项目的简单性

其实在spark上构建一个项目是一个很简单的事情,比较繁琐的是环境的搭建。

spark上实现一个项目就和实现一个普通的非分布式的项目一样,下面用两个例子来说明:

1、Wordcount程序(spark和Hadoop对比)

(1)Hadoop比较繁琐,需要写一个map程序,实现单词的切分,以及进行发送出去(也就是写到磁盘的过程),然后你还要写一个reduce程序,将相同的单词进行计数累加,最后你还要写一个main方法,来设置哪一个是map.哪一个是reduce,设置文件的输入和输出路径,提交job等等,这些都需要你来完成(参考我的第一个Hadoop例程)

(2)spark就比较简单了,你就当你处理的不是大数据,而是一个小数据,这样你会怎么处理,先read文件,进行split,然后按照key进行累加计数,用python几句话就实现了,其实spark就是这样的,唯一的区别就是你的数据是RDD或者dataframe,还有处理方法的名字会有点区别,其他的都一样,不用你设置map和reduce等,直接就在分布式上运行,并且还不涉及到向磁盘的写入,比Hadoop快速。

2、机器学习程序

    spark搭建机器学习有两种方式,一种是基于RDD,一种是基于dataframe和pipeline流水线进行处理

    其中rdd和dataframe都可以简单的认为是一个pandas中的dataframe,只不过RDD中没有scheme也就是数据类型,也就是一行是一个数据,常用的map方法都是基于行来操作的,RDD中包含有很多行,dataframe引入ROW(行),RDD可以通过这个因此对应的数据类型,并且直接实现列的操作。

    基于RDD的机器学习程序的编写和非分布式机器学习程序的编写没有任何区别,仅仅是其数据类型不同(RDD比较特殊,里面有转移和动作操作)

    基于dataframe和pipeline流水线,也很好理解,就是先搭建一个流水线,什么都不做,然后从头放入数据就行,尾巴直接出来结果,这就是流水线的思想,对应spark中的ml库,而RDD对应mllib库,以后官方主要支持的就是基于dataframe和pipeline流水线该种方式。

总的来说,只要搭建好spark坏境,其语法、逻辑和python写程序一样,唯一的区别是spark运行在分布式系统上。

猜你喜欢

转载自blog.csdn.net/herr_kun/article/details/85235717