6.4

RDD分区
内存分区

 /*
          【1】
          【2,3】
          【4】
          【5,6】
          -------------------------------
          len=6, partnum=4

          (0 until 4) => [0, 1, 2, 3]

          0 => ((i * length) / numSlices, (((i + 1) * length) / numSlices))
            => ((0 * 6) / 4, (((0 + 1) * 6) / 4))
            => (0, 1) => 1
          1 => ((i * length) / numSlices, (((i + 1) * length) / numSlices))
            => ((1 * 6) / 4, (((2) * 6) / 4))
            => (1, 3) => 2
          2 => ((i * length) / numSlices, (((i + 1) * length) / numSlices))
            => ((2 * 6) / 4, (((3) * 6) / 4))
            => (3, 4) => 1
          3 => ((i * length) / numSlices, (((i + 1) * length) / numSlices))
            => ((3 * 6) / 4, (((4) * 6) / 4))
            => (4, 6) => 2
         */

        // TODO Spark分区数据的存储基本原则:平均分

硬盘分区

// TODO Spark进行分区处理时,需要对每个分区的数据尽快能地平均分配
        //    totalsize = 7
        //    goalsize = totalsize / minpartnum = 7 / 2 = 3
        //    partnum = totalsize / goalsize = 7 / 3 = 2...1 => 2 + 1 = 3

        // TODO Spark不支持文件操作的。文件操作都是由Hadoop完成的
        //    Hadoop进行文件切片数量的计算核文件数据存储计算规则不一样。
        //    1. 分区数量计算的时候,考虑的是近可能的平均 : 按字节来计算
        //    2. 分区数据的存储是考虑业务数据的完整性 : 按照行来读取
        //       读取数据时,还需要考虑数据偏移量,偏移量从0开始的。
        //       读取数据时,相同的偏移量不能重复读取。
        /*
        【3】 => [0, 3]
        【3】 => [3, 6]
        【1】 => [6, 1]
        ----------------------------------------
        1@@ => 012
        2@@ => 345
        3   => 6
        ----------------------------------------
        [0, 3] => 【1,2】
        [3, 6] => 【3】
        [6, 7] =>

        ---------------------------------------------------------------------------
        1. 分区数量
           goalsize = 14 / 4 => 3
           partnum  = 14 / 3 = 4...2 => 4 + 1 = 5

        2. 分区数据
         [0, 3]   => 【11】
         [3, 6]   => 【22】
         [6, 9]   => 【33】
         [9, 12]  => 【44】
         [12, 14] => 【】
         -----------------------------------------
         11@@ => 0123
         22@@ => 4567
         33@@ => 891011
         44   => 1213
         -----------------------------------------
         12345678901234 => 012345678910111213
         [0, 3]   => 【12345678901234】
         [3, 6]   => 【】
         [6, 9]   => 【】
         [9, 12]  => 【】
         [12, 14] => 【】


         */
posted @ 2024-06-04 23:36  258333  阅读(4)  评论(0编辑  收藏  举报