林子雨-5.1 RDD编程基础

目录

1、RDD属于Spark Core

2、RDD的创建

文件加载

通过并行集合(数组)创建RDD

3、RDD的操作(Transformation)

filter(func):高阶函数→参数是函数

map(func):一对一的映射

flatmap(func):

groupByKey():应用于键值对

reduceByKey(func)

4、RDD的操作(action)

count()

collect()

first()

take(n)

reduce(func)

foreach(func)

惰性机制

5、持久化

6、分区(作用和原则)

作用

分区原则

7、设置分区的方法

重分区

分区类型

自定义分区方法

8、综合实例


1、RDD属于Spark Core

spark核心:RDD

2、RDD的创建

文件加载

通过SparkContext对象的textFile()读取文件生成RDD

file:///表示读取本地文件

每一行都是RDD的一个元素

hdfs://localhost:9000/也可以简写为/

通过并行集合(数组)创建RDD

调用sc的parallelize方法

3、RDD的操作(Transformation)

当对一个RDD进行Trans操作时只会记录下操作,只有遇到action时才会真正执行程序

filter(func):高阶函数→参数是函数

map(func):一对一的映射

每个元素经过map操作后都生成了新的元素

flatmap(func):

groupByKey():应用于键值对

reduceByKey(func)

对分组得到的值列表再次进行func操作

4、RDD的操作(action)

动作类型操作才会执行真正的计算(包括加载)

count()

统计当前RDD的元素个数

collect()

以数组的方式把执行结果返回到driver端(程序发起的终端)

first()

take(n)

以数组形式返回

reduce(func)

foreach(func)

惰性机制

转换类型操作在遇到动作类型操作时才会进行从头到尾的计算

5、持久化

spark是基于内存的计算

用户可以把可能需要反复使用的数据集持久化到内存中,不持久化就是用完就扔,所以持久化可以大大提升程序运行效率。

两次动作操作导致整个程序被从头到尾计算了两次,数据被重复生成。

缓存的意义:第二次动作操作时只需要去使用第一次动作操作时缓存起来的值,避免重复计算。

?可以解释下图:

Job里有很多stage,stage里有很多task。

每一个动作类型都会生成一个Job

persist():对RDD标记持久化

并不会马上计算生成RDD并把它持久化

只有在遇到动作类型操作时才会真正持久化

.persist(n)

n有多个缓存级别

只放内存(会有新老更替)

其他缓存级别自行百度

移除持久化:unpersist

完整实例:

6、分区(作用和原则)

作用

分区原则

分区数=集群中的CPU核心数目

CPU的核数为8,分区也为8,对应产生8个线程,正好可以处理8个分区。

spark.default.parallelism

本地模式

默认为本地机器CPU的数目

local[N]为N

apache Mesos

没有设置时默认为分区数为8

standalone yarn

集群中所有核心数目总和与该参数的默认值比较,取较大值

7、设置分区的方法

重分区

.repartiton

分区类型

自定义分区方法

继承Partitioner并重写其以下几个方法

根据Key值的最后一位数字,写到不同的文件。

RDD自定义分区类只支持对键值对重分区,所以要把单RDD转成键值对RDD

分区后的文件数目等于分区数

8、综合实例

词频统计

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值