Spark開發-Spark中的設計模式_建立型模式大類
阿新 • • 發佈:2021-01-11
設計模式
原則:
建立型模式
這些設計模式提供了一種在建立物件的同時隱藏建立邏輯的方式,而不是使用 new 運算子直接例項化物件。 這使得程式在判斷針對某個給定例項需要建立哪些物件時更加靈活。 原型模式 (Prototype Pattern) 單例模式 (Singleton Pattern) 工廠模式 (Factory Pattern) 抽象工廠模式 (Abstract Factory Pattern) 建造者模式 (Builder Pattern) 說明: 工廠模式: 簡單工廠模式(靜態方法模式) 工廠方法模式 抽象工廠模式
1.原型模式
class SparkConf(loadDefaults: Boolean) extends Cloneable with Logging with Serializable
2.單例模式
Spark中的 伴生物件就是屬於單例模式
3.建造者模式
SparkSession
應用或使用:--使用場景 - 在客戶端使用鏈式呼叫,一步一步的把物件構建出來
val spark = SparkSession.builder()
.appName("Common")
.master("local[0]")
.getOrCreate()
說明:
Builder模式的好處之一是可以將物件的建立權交給Builder類, 可將物件的配置傳遞和被建立物件隔離開, 方便使用配置檔案來配置建立物件, SparkSession通過 SparkSession類,SparkSession靜態類和Builder內部類實現了非常方便呼叫的介面, 可以靈活根據引數和配置檔案來建立SparkSession物件 場景: 當一個類的建構函式引數超過4個,而且這些引數有些是可選的時,我們通常有兩種辦法來構建它的物件 應用: 構建者解決複雜物件的構建問題 作為對比常用: Javabean 模式
模式原始碼
@InterfaceStability.Stable class SparkSession private( @transient val sparkContext: SparkContext, @transient private val existingSharedState: Option[SharedState], @transient private val parentSessionState: Option[SessionState], @transient private[sql] val extensions: SparkSessionExtensions) extends Serializable with Closeable with Logging { object SparkSession extends Logging { /** * Builder for [[SparkSession]]. */ @InterfaceStability.Stable class Builder extends Logging {
如何實現
在 SparkSession 中建立一個靜態內部類 Builder,然後將 SparkSession 中的引數都複製到Builder類中。
在 SparkSession中建立一個private的建構函式,引數為Builder型別
在Builder中建立一個public的建構函式,引數為Computer中必填的那些引數, 。
在Builder中建立設定函式,對SparkSession中那些可選引數進行賦值,返回值為Builder型別的例項
在Builder中建立一個build()方法,在其中構建Computer的例項並返回
def builder(): Builder = new Builder
4.工廠模式
Factory Pattern
RowFactory
A factory class
參考:
Builder模式實戰2 (Spark/SparkSession) https://www.cnblogs.com/arxobject/p/13670470.html
Spark涉及的設計模式-建立型-原型模式 https://blog.csdn.net/sinat_35045195/article/details/107692251