spark入门 textFile 分区(七)

测试代码

package com.longer.core.rdd.builder

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Spark02_RDD_File_Par {
  def main(args: Array[String]): Unit = {
    //准备连接
    val conf = new SparkConf().setMaster("local[*]").setAppName("RDD")
    conf.set("spark.default.parallelism", "1")
    val context=new SparkContext(conf)

    //读取文件创建RDD
    //textFile可以将文件作为数据处理的数据源,默认也可以设定分区
    // minPartitions:最小分区数量
    //  math.min(defaultParallelism, 2)
    //如果默认只想一个分区可以设置默认参数
    val rdd:RDD[String] = context.textFile("datas/2.txt")

    rdd.saveAsTextFile("output")
  }
}

分区数:通俗理解:
当textFile无设置分区时候,使用的是默认参数

默认参数的计算为
spark.default.parallelis默认是你的计算机核数,所以当时单核的时候是1,双核数以上是2,可以通过 conf.set(“spark.default.parallelism”, “1”)强制配置为1
拿的是
模数=文件字节大小/math.min(“spark.default.parallelism”,2)
分区数=Math.ceil(文件字节大小/模数) 向上取整
所以默认分区数目一般为1或者3
这种是基于小文件
一个分区大小为128M,还需要基于大文件考虑
分区数=文件字节大小/32M
大文件如果是存到本地的化默认为32M hdfs为128M

分区偏移量:
偏移量=Math.ceil(行数/分区数)

数据是以行为单位进行读取的
park读取文件,采用的是hadoop的方式读取,所以一行一行读取,和字节数没有关系
// 依此类推
//【0,偏移量)
//【偏移量,偏移量+偏移量)

当多文件的时候,会以一个文件为分区,如果是大文件的化,则会再根据32M或者128M划分分区

你可能感兴趣的:(spark,大数据,分布式)