一、认识RDD
1>什么是RDD?
- Resilient 弹性的 Distributed 分布式的 Dataset 数据集
- 是spark中最基础的抽象单元
- 不可变的、可以分区、可以并行计算
2>RDD有哪些特点特性?
- 一个RDD是有多个分区的(即多个partitions [pɑːˈtɪʃ(ə)n] )
- 对一个RDD执行一个函数,就是对RDD中的每一个分区执行相同的函数
- RDD是可以存在依赖关系的,当RDD的部分分区的数据丢失时,
Spark可以根据依赖关系来恢复丢失的分区数据,
而不是进行整个RDD的重新计算
- 有key-value数据的RDD,会有一个partitioner的属性,
可以自定义分区函数(多使用key的hash函数)进行分区
- 数据本地性,当数据和计算不在一起的时候,计算移动优于数据移动
二、创建RDD
第一步: 需要先创建是一个SparkContext
SparkContext的作用是啥?
- 连接到Spark集群:local、standalone、yarn、mesos等
- 通过SparkContext来创建RDD,广播变量到集群
如何创建一个SparkContext?
创建SparkContext之前需要先创建一个SparkConf对象,
是一个配置对象,来配置app名称和master
在pyspark中直接执行 pyspark即可创建SparkContext 【sc】
第二步:创建RDD
方式一: (多在测试的时候使用)
sc.parallelize(data, num) 第二个可选参数可以设置分成几个partitions
```
data = [1, 2, 3, 4]
distData = sc.parallelize(data)
distData.collect() #查看数据
distData.reduce(lambda a, b: a+b) #进行累加操作
```
方式二:(正常使用,使用外部数据集)
#本地文件
sc.textFile("file://filePath/filename").collect()
#hdfs文件
sc.textFile("hdfs://localhost:9000/filename").collect()
注意⚠️:如果是使用本地的文件,需要保证在每一个工作节点上面均可以相同的路径访问到文件;
默认是128M作为一个partition,可以第二个参数自定义partitions数量