• <nav id="dstbx"></nav>

    <nav id="dstbx"></nav>
    1. <form id="dstbx"></form>
    2. <small id="dstbx"></small>

      教育行業A股IPO第一股(股票代碼 003032)

      全國咨詢/投訴熱線:400-618-4000

      怎樣給RDD分區?各種模式下的分區數目設置

      更新時間:2021年01月29日15時08分 來源:傳智教育 瀏覽次數:

        在分布式程序中,網絡通信的開銷是很大的,因此控制數據分布以獲得最少的網絡傳輸開銷可以極大地提升整體性能.Spark程序可以通過控制RDD分區方式來減少通信開銷。Spark中所有的RDD都可以進行分區,系統會根據一個針對鍵的函數對元素進行分區。雖然Spark不能控制每個鍵具體劃分到哪個節點上,但是可以確保相同的鍵出現在同一個分區上。RDD的分區原則是分區的個數盡量等于集群中的CPU核心(Core)數目。對于不同的Spark部署模式而言,都可以通過設置spark.default.prallien這個參數值來配置默認的分區數目。一般而言,各種模式下的默認分區數目如下。

        (1) Local模式:默認為本地機器的CPU數目,若設置了loca[N],則默認為N。

        (2) Standalone或者Yarn模式:在“集群中所有CPU核數總和”和“2”這兩者中取較大值作為默認值。

        (3) Mesos 模式:默認的分區數是8。

        Spark框架為RDD提供了兩種分區方式,分別是哈希分區(HashPartitioner)和范圍分區(RangePartitioner)。其中,哈希分區是根據哈希值進行分區;范圍分區是將一定范圍的數據映射到一個分區中。這兩種分區方式已經可以滿足大多數應用場景的需求。與此同時,Spark也支持自定義分區方式,即通過一個自定義的Partitioner對象來控制RDD的分區,從而進一步減少通信開銷。 需要注意的是,RDD的分區函數是針對(Key, Value)類型的RDD,分區函數根據Key對RDD元素進行分區。因此,當需要對一些非(Key,Value)類型的RDD進行自定義分區時,需要先把RDD元素轉換為(Key,Value)類型,再通過分區函數進行分區操作。

        如果想要實現自定義分區,就需要定義一個類,使得這個自定義的類繼承org. apache.spark. Partitioner類,并實現其中的3個方法,具體如下。

        (1) def numPartitions:Int:用于返回創建的分區個數。

        (2) def getPartition(Key:Any):用于對輸人的Key做處理,并返回該Key的分區ID,分區ID的范圍是0~ numPartitions 1。

        (3) equals (other: Any):用于Spark判斷自定義的Partitioner對象和其他的Partitioner 對象是否相同,從而判斷兩個RDD的分區方式是否相同。其中,equals()方法中的參數other表示其他的Partitioner 對象,該方法的返回值是一個Boolean類型,當返回值為true時表示自定義的Pritioer對象和其他Pritioer對象相同,則兩個RDD的分區方式也是相同的;反之,自定義的Pritoner對象和其他Prtitioer對象不相同,則兩個RDD的分區方式也不相同。




      猜你喜歡:

      RDD為什么要進行數據持久化?持久化詳細操作步驟示例

      兩種RDD的依賴關系介紹

      怎樣使用Linux和HDFS創建RDD?

      傳智教育大數據開發工程師培訓

      0 分享到:
      神马影院我不卡