写在前面

本文隶属于专栏《100个问题搞定大数据理论体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和文献引用请见100个问题搞定大数据理论体系

解答

我们将多个不同的处理模块连接在一起,最后得出一个自己需要结果的有向无环图(Directed Acyclic Graph/DAG),称为一个工作流系统Workflow System。

1. 复制模式
2. 过滤模式
3. 分离模式
4. 合并模式

补充

复制模式(Copier Pattern)

复制模式通常是将单个数据处理模块中的数据,完整地复制到两个或更多的数据处理模墺中,然后再由不同的数据处理模块进行处理。
工作流系统图通常如下图所示。
复制模式

过滤模式( Filter Pattern)

过滤模式的作用是过滤掉不符合特定条件的数据。
在数据集通过了这个数据处理模块后,数据集会缩減到只剩下符合条件的数据。工作流系统图通常如下图所示。
过滤模式

分离模式( Splitter Pattern)

如果你在处理数据集时并不想丟弃里面的任何数据,而是想把数据分类为不同的类别来进行处理时,你就需要用到分离模式来处理数据。它的工作流系統图通常如下图所示。
分离模式

合并模式( Joiner Pattern)

合并模式会将多个不同的数据集转換集中到一起,成为一个总数据集,然后将这个总的数据集放在一个工作流中进行处理。
合并模式

实践

问题

在一个航空预定系统中,我们需要处理用户注册、购买机票和出行前24小时的提醒等功能。在这整个过程中,系统的数据处理运用了哪几个设计模式呢?

解答

1.注册:合并模式(因为注册渠道可能会有手机号注册、邮箱注册、微信注册等等不同的渠道,所以需要合并) 
2.购买机票:过滤+合并(首先过浪出用户查找的航班机票信息、之后查找出符合条件的机票由于可能来自不同的渠道,所有需要合并后返回给用户
3.提醒:复制+过滤+分离
过滤:根据时间、地点等因素过滤出需要给予提醒的用户and机票
复制:有可能需要对同一份数据(勾选多种提醒方式的用户)进行不同的处理(邮件通知or电话通知or短信通知) 
分离:将前面过滤出的用户进行分成3组,分别对应(邮件通知+电话通知+短信通知)

Q.E.D.


Apache Spark Contributor