一、RDD概念
RDD(英文全称Resilient Distributed Dataset),即弹性分布式数据集是spark中引入的一个数据结构,是Spark中最基本的数据抽象,代表一个不可变、可分区、里面的元素可并行计算的集合。
Resilient弹性:RDD的数据可以存储在内存或者磁盘当中,RDD的数据可以分区。
Distributed分布式:RDD的数据可以分布式存储,可以进行并行计算。
Dataset数据集:一个用于存放数据的集合。
二、RDD算子
指的是RDD对象中提供了非常多的具有特殊功能的函数, 我们将这些函数称为算子(函数/方法/API)。
RDD算子分为两类:
Transformation(转换算子):
返回值: 是一个新的RDD
特点: 转换算子只是定义数据的处理规则,并不会立即执行,是lazy(惰性)的。需要由Action算子触发
Action(动作算子):
返回值: 要么没有返回值None,或者返回非RDD类型的数据
特点: 动作算子都是立即执行。执行的时候,会将它上游的其他算子一同触发执行
以下演示Spark学习用到的相关RDD算子,通过SecureCRTPortable客户端远程连接Linux服务器操作pyspark。
连接界面如下:
三、RDD的转换算子
(一)(单)值类型算子
1、map算子
格式:rdd.map(fn)
作用: 主要根据传入的函数,对数据进行一对一的转换操作,传入一行,返回一行。
需求: 数字加一后返回
代码:
init_rdd = sc.parallelize([0,1,2,3,4,5,6,7,8,9])
init_rdd.map(lambda num:num+1).collect()
#运行结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
2、groupBy 算子
格式: groupBy(fn)
作用: 根据用户传入的自定义函数,对数据进行分组操作
需求: 将数据分成奇数和偶数
代码:
>>> init_rdd = sc.parallelize([0,1,2,3,4,5,6,7,8,9])
>>> init_rdd.groupBy(lambda num:"偶数" if num % 2 == 0 else "奇数").mapValues(list).collect()
# 运行结果:[('偶数', [0, 2, 4, 6, 8]), ('奇数', [1, 3, 5, 7, 9])]
说明:mapValu