Rdd基本操作
Rdd介绍
- 弹性分布式数据集合, 是spark最基本的数据类型, 存储在内存中
- 弹性 -> 分区(将数据拆分成多份), 类似于HDFS的分块
- 分布式 -> 使用多台服务器的计算资源
- 数据集合 -> 规定了spark中数据的形式, 类似于python中的列表类型 [1,2,3,4]
Rdd特点
- 分区
- 将rdd的数据拆分成多份
- 分区数等于task线程数
- 只读
- rdd的数据只能读取, 不能修改, 不可变类型
- 依赖
- 相邻的rdd之间存在一个依赖关系, 因果关系
- 新的rdd一定是由旧的rdd计算得到
- 缓存
- 将中间计算得到的rdd进行缓存操作
- 保存在内存中或磁盘中, 临时持久化
- 容错机制
- 缓存rdd随着spark应用程序执行结束后自动清空
- checkpoint
- 将中间计算得到的rdd进行checkpoint操作
- 保存在HDFS中, 永久持久化
- 容错机制
python数据类型转换成Rdd数据
1:先导入spark模块
from pyspark import SparkContext
2:创建rdd对象
```python
sc=SparkContext()
3:创建python数据类型,如;
```python
str='abcde'
list1=[1,2,3]
set1={1,2,3}
tuple1=(1,)
dict1={'name':'xiuer'}
数据集合相当于是容器,所以数值类型和布尔类型,浮点数类型都不可以转换成rdd数据
字典默认打印出来的是key(键),所以如果要打印values的话就需要指定
创建rdd指定分区数
#第一部导入模块
from pyspark import SparkContext
sc=SparkContext()
#numSlices:分区数,不写的话默认是2
rdd1=sc.parallelize(c=[1,2,3],numSlices=)
res1=rdd.glom().collect()
res2=rdd.collect()
print(res1)
print(res2)
from pyspark import SparkContext
sc=SparkContext()
print(sc.defaultParallelism)
#minPartitions最小分区数
rdd2=sc.textFile('/data/words.txt',minPartitions=3)
res3=rdd2.glom().collect()
res4=rdd2.collect()
print(res3)
print(res4)
手动修改rdd分区数
from pyspark import SparkContext
sc=SparkContext()
rdd1=sc.parallelize([1,2,3,4,5,6,7,8],numSlices=3)
rdd2=rdd1.repartition(numPartitions=5)
print(rdd2.glom().collect())