Apache Spark 和领域驱动设计

Posted

技术标签:

【中文标题】Apache Spark 和领域驱动设计【英文标题】:Apache Spark and Domain Driven Design 【发布时间】:2016-07-18 10:09:19 【问题描述】:

我有一个有点抽象的问题。我最近一直在使用 Apache Spark(还有 Streaming 和 SQL)和 Scala。我的大多数 Spark 作业基本上将 RDD/Dataframes 从一个类移动到另一个类,每个类对输入执行一些转换。

我最近也在阅读有关领域驱动设计的文章,这让我开始思考如何使用 DDD 对 Spark 程序进行建模。我不得不说,我发现使用 DDD 概念对 Spark 代码建模比对非 Spark 代码建模要困难得多(可能是因为它主要执行转换或 IO)。我可能会考虑如何创建一种无处不在的语言,但不会考虑如何在 Spark 代码本身中实际应用它。

我尝试用谷歌搜索如何使用 Spark 和 DDD,但找不到任何关于它的信息,所以我想知道:

我只是错过了一些关于如何将 DDD 概念应用于 Spark 代码的内容吗? 也许 Spark 作业如此专注于 ETL,以至于它们实际上不需要使用 DDD?如果不是这样,有人可以解释她/他如何将 DDD 概念与 Spark 代码一起使用吗?也许一些例子可能有用

我希望这是一个合理的问题 - 如果不是,我很抱歉

提前致谢

【问题讨论】:

Spark 适用于短期运行、相当简单但需要内存/计算的作业。 DDD 是用于对相当复杂的系统进行建模的东西 - 所以典型的设置是让 spark 项目在某处处理您的数据并以聚合形式将其持久化,而 DDD 项目实际使用处理过的数据。 这些简单的计算有时会变成带有大量代码的相当大的系统 - 你不认为当它们变成带有大量代码行和类的相当复杂的系统时,它们还需要重新建模? 【参考方案1】:

Spark 的 DSL 和 DDD 是截然不同的抽象。您面临的挑战源于两个抽象之间的“距离”。这是复杂系统设计中的常见问题,它表明缺少连接两者的抽象。在您的情况下,这将是一个非常适合 DDD 的抽象,然后通过 DSL “生成” Spark 转换。 Scala 非常适合构建这样的抽象。有关可能的提示,请参阅:https://databricks.com/session/the-smart-data-warehouse-goal-based-data-production

【讨论】:

以上是关于Apache Spark 和领域驱动设计的主要内容,如果未能解决你的问题,请参考以下文章

什么是DDD(领域驱动设计)?

DDD领域驱动设计-DDD概览

DDD的理解

领域驱动设计-什么是领域驱动设计和怎么使用它

构建领域驱动设计知识体系

领域驱动设计的必要性和模型标准——《领域驱动设计-精简版》