1.rdd介绍
-
RDD是spark的一种数据模型(规定数据的存储结构和计算方法)
-
RDD是将数据分布式存储在不同服务器的内存上,通过RDD共享不同服务器的内存数据
-
所以Spark是基于内存进行分布式数据计算的框架
1.1 rdd特点
-
分区
-
可以将计算的海量数据分成多份,需要分成多少可分区可以通过方法指定
-
每个分区都可以对应一个task线程执行计算
-
-
只读
-
rdd中的数据不能直接修改,需要通过方法计算后得到一个新的rdd
-
rdd本身存储的数只能读取
-
-
依赖
-
rdd之间是有依赖关系的
-
新的rdd是通过旧的rdd计算得到
-
-
缓存
-
可以将计算的中结果缓存起来,如果后续计算错误时,可以从缓存位置重新计算
-
将数据存储在内存或本地磁盘
-
作用是容错
-
缓存在执行计算任务程序结束后会释放删除
-
-
checkpoint
-
作用和缓存一样
-
checkpoint可以将数据存储在分布式存储系统中,比如hdfs
-
2.rdd的应用
2.1创建rdd
# 导入sparkcontext
from pyspark import SparkContext
# 创建SparkContext对象
sc = SparkContext()
# 将Python数据转为rdd
data_list = [1, 2, 3, 4]
rdd = sc.parallelize(data_list)
# rdd的数据输出展示
# 获取所有rdd数据
res = rdd.collect()
print(res)
2.2hdfs数据转为rdd
# 将读取的hdfs文件数据转为rdd
from pyspark import SparkContext
# 生成SparkContext类对象
sc = SparkContext()
# 读取文件数据转为rdd
rdd = sc.textFile('hdfs://node1:8020/data')#数据文件在hdfs的存储路径
# 查看数据
res = rdd.collect()
print(res)
2.3rdd的分区
# 导入sparkcontext
from pyspark import SparkContext
# 创建SparkContext对象
sc = SparkContext()
# 创建生成rdd是可以指定分区数
# Python数据转为rdd指定
# numSlices 可以指定分区数
rdd_py = sc.parallelize([1,2,3,4,5,6],numSlices=3)
# 查看rdd分区数据
res = rdd_py.glom().collect()
print(res)
2.4小文件数据读取
# 导入sparkcontext
from pyspark import SparkContext
# 创建SparkContext对象
sc = SparkContext(master='yarn')
# rdd = sc.textFile('hdfs://node1:8020/data')
# rdd计算
# wholeTextFiles 会合并小文件数据
# minPartitions 指定分区数
rdd_mini = sc.wholeTextFiles('hdfs://node1:8020/data',minPartitions=1)
# 展示数据
# res1 = rdd.glom().collect()
# print(res1)
res2 = rdd_mini.glom().collect()
print(res2)