RDD编程
Spark中的核心数据操作:
- 创建RDD
- 转换已有的RDD
- 调用RDD操作进行求值
Note:
RDD是Spark数据操作的核心,它的主要特点是操作链,惰性求值。
RDD创建
创建RDD主要有两种方法:
- 读取外部数据集
JavaRDD<String> lines = sc.textFile("your file path")
- 在驱动程序中对一个集合进行并行化
JavaRDD<String> lines = sc.parralelize(Arrays.asList("pandas","i like pandas"));
RDD的操作
RDD的操作可以分为两种操作:1. 转换操作,2. 行动操作。
- 转换操作
RDD的转换操作是在RDD的依赖操作链上新增一个操作,但是并不对RDD进行实际计算,而是直接返回一个新的RDD。(这个像函数式编程里面的惰性计算,能有效的提高性能。)。
Note:
Spark里面主要通过谱系图(lineage graph)来记录RDD的操作依赖链关系。通
过这种方式,Spark可以实现按需计算转换操作,也可在持久化的RDD丢失部分数据的情况时恢复所丢失的数据。
常用的转换操作有:
filter() //过滤数据集
map() //依次对数据集中每个数据进行操作
flatmap() //将函数应用于RDD的每个元素,将返回的迭代器的所有内容构成新的RDD,通常用来切分单词
distinct() //去重
sample() //采样
union() //求并集
intersection() //求交集
substract() //求子集
cartesian() //求笛卡尔子集
示例:
//filter
JavaRDD<String> errorsRDD = inputRDD.filter(
new Function<String, Boolean>() {
public Boolean call(String x) {
return x.contains("error");
}
}
);
- 行动操作
RDD的行动操作会对数据集进行实际计算,它会根据RDD的依赖操作链进行优化,然后根据优化后的依赖操作链上的转换操作依次对数据进行转换操作,最后计算出结果返回到驱动器程序或者写入外部存储系统中。
常用的行动操作有:
count(