分区
1 分区数
Spark 读取本地数据,默认分区数是电脑CPU核数,最小是4。如果设置分区小于4,分区数量依然是4 Spark 读取外部文件,默认分区数一般是2,是Math.min(2,CPU核数)
2 如何分区
读取外部文件 textFile,我们设置分区数参数时,赋予的值不是实际分区数,而是最小分区数 – 如果路径下所有文件内容总字节数能整除设置的最小分区数,则实际分区数则为设置分区数 – 如果不能整除,看下面例子 注意读取数据时,假设每个分区读取3个字节,读取到某一行时数据超过了3个字节,程序会读完整行数据 (按照 next readLine 方式读取),改分区会记录超过3个字节的整行数据。
设置最小分区为3,外部文件数据如下 例子1 1 2 3 4 四行数据占用10个字节,每个数字一个字节,每行最后会默认加 /r/n 两个字节,共10个字节。 会先3个分区每个分区写入3个字节,最后一个字节会写入第四个新分区。 虽然设置3个分区,但实际是用了4个分区。 最终输出结果,第一个分区 1,第二个分区2,第三个分区3,4 (因为按行读,4会写入),第四个分区空
例子2 123456 123456 占用6个字节。可以被3整除,所以实际分区数为3,每个分区放2个字节
例子3 文件19个字节,设置分区数为5 19/5 = 3,每个分区写入3个字节,所以需要7个分区
**
转换算子
** 懒加载,不会立刻执行
value 类型
map 每个元素一个一个执行
data = data.map(_*2)
mapPartitions 以分区为单位,一个分区元素执行map
双value类型
key-value类型
**
集合算子
** 出发任务的执行 collect
未完待续
|