一、RDD的介绍(了解)
RDD:resilient distributed dataset(弹性分布式数据集合 ) spark的计算核心,spark采用rdd管理数据
-
RDD
-
RDD是spark的一种数据模型(规定数据的存储结构和计算方法)
-
python中的数据模型
-
list [] 可以重复存储数据 append
-
set{} 不允许重复存储
-
dict {k:v} get(key)
-
-
RDD的模型可以对内存数进行共享管理
-
-
分布式
-
数据可以在多台服务器上同时计算执行
-
-
弹性
-
可以根据计算的需求将数据进行分区拆分,本质就是将数据分成多份
-
二、RDD的特点(了解)
-
分区
-
可以将计算的海量数据分成多份,需要分成多少可分区可以通过方法指定
-
每个分区都可以对应一个task线程执行计算
-
-
只读
-
rdd中的数据不能直接修改,需要通过方法计算后得到一个新的rdd
-
rdd本身存储的数只能读取
-
-
依赖
-
rdd之间是有依赖关系的
-
新的rdd是通过旧的rdd计算得到
-
-
缓存
-
可以将计算的中结果缓存起来,如果后续计算错误时,可以从缓存位置重新计算
-
将数据存储在内存或本地磁盘
-
作用是容错
-
缓存在执行计算任务程序结束后会释放删除
-
-
checkpoint
-
作用和缓存一样
-
checkpoint可以将数据存储在分布式存储系统中,比如hdfs
-
三、创建RDD数据(掌握)
将需要计算的数据转为rdd的数据,就可以利用spark的内存计算方法进行分布式计算操作,这些计算方法就是有rdd提供的
rdd数据的转化方法是有sparkcontext提供的,所以需要先生成sparkcontext,sparkcontext中还包含资源申请和任务划分功能
SparkContext称为Spark的入口类
3-1 Python数据转化为rdd
# 导入sparkcontext from pyspark import SparkContext # 创建SparkContext对象 sc = SparkContext() # 将Python数据转为rdd # data_int = 10 # 数值类型不能转化rdd # 能for循环遍历的数据都能转为rdd data_str = 'abc' data_list = [1, 2, 3, 4] data_dict = {'a': 1, 'b': 2} data_set = {1, 2, 3, 4} data_tuple = (1, 2, 3, 4) rdd = sc.parallelize(data_tuple) # rdd的计算 # rdd的数据输出展示 # 获取所有rdd数据 res = rdd.collect() print(res)
3-2 文件数据(hdfs)转化为rdd
# 将读取的hdfs文件数据转为rdd from pyspark import SparkContext # 生成SparkContext类对象 sc = SparkContext() # 读取文件数据转为rdd rdd1 = sc.textFile('hdfs://node1:8020/data') rdd2 = sc.textFile('/data/words.txt') # 查看数据 res = rdd1.collect() print(res) res = rdd2.collect() print(res)
3-3 rdd的分区
-
python数据转发的分区数指定
# RDD分区使用 # 导入sparkcontext from pyspark import SparkContext # 创建SparkContext对象 sc = SparkContext() # 创建生成rdd是可以指定分区数 # Python数据转为rdd指定 # numSlices 可以指定分区数 rdd_py = sc.parallelize([1,2,3,4,5,6],numSlices=10) # rdd计算 # 查看rdd分区数据 re