spark学习笔记

本文深入探讨了Spark中RDD(弹性分布式数据集)的创建,特别是从内存和文件中创建RDD时的分区策略。对于内存创建,RDD的分区基于CPU核数,默认情况下数据均匀分布。而从文件创建RDD时,分区数取决于文件字节数和最小分区数,遵循Hadoop的切块原则,按行读取数据。在多文件场景下,分区计算以每个文件为单位进行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 从内存中创建RDD

    • 分区:指定分区;默认分区:默认第一会去看你的sparkcontext上下文环境是否配置,没有就默认(默认为你的CPU核数)

    • 分区数据分配:分区数转换为列表【0,1...】,数据分区核心源码:start = (i * length) / num;end = ((i + 1) * length) / num;数据分区范围为【start,end】length为数据(数组)长度,num为分区数

      例:数据:【1,2,3,4】 ; 3分区【0,1,2】

      0 = > start=0*4/3=0 ;end=(0+1)*4/3=1 => [0,1]

      1 = > start=1*4/3=1,end=2*4/3=2 =>[1,2]

      2 = > start=2*4/3=2,end=3*4/3=4 = >[2,4]

      数据:【1,2,3,4,5】 ; 3分区【0,1,2】

      0 = > start=0*5/3=0 ;end=(0+1)*5/3=1 => [0,1]

      1 = > start=1*5/3=1,end=2*5/3=3 =>[1,3]

      2 = > start=2*5/3=3,end=3*5/3=5 = >[3,5]

  • 从文件中创建RDD

    • 分区:存在一个最小分区(可指定):默认的是默认最小分区和2之间的最小数,默认最小分区为你的CPU核数,所以一般最小分区为2;最小分区的存在说明分区数不确定

      那么具体分区数为多少?spark分区最终调用的是hadoop的切块,它会先读取所有文件的字节总数,字节总数 除(/) 最小分区数 来获取每个分区的字节数,然后按字节数分区,这里有着1.1原则(hadoop切块原则)

      例:7个字节最小分区2:7/2=3(byte) 每个分区3个字节,7/3=2.....1(1/3=0.33)超出1.1则需重新分配一区,所以最终存在3个分区

    • 分区数据读取:spark采用的是hadoop的读取方式,按行读取,且数据读取时以偏移量为单位

      例:7个字节:1** => 012(偏移量)  数据分区的偏移量计算

                              2** => 345                0 => [0,3] => [1,2] 按行读取,一行读完是不会再读的

                              3 => 6                       1 => [3,6] => [3]

                                                                         2 => [6,7] => [ ]

多个文件时计算分区是以文件为单位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值