1.RDD介绍:
RDD,弹性分布式数据集,即分布式的元素集合。在spark中,对所有数据的操作不外乎是创建RDD、转化已有的RDD以及调用RDD操作进行求值。在这一切的背后,Spark会自动将RDD中的数据分发到集群中,并将操作并行化。
Spark中的RDD就是一个不可变的分布式对象集合。每个RDD都被分为多个分区,这些分区运行在集群中的不同节点上。RDD可以包含Python,Java,Scala中任意类型的对象,甚至可以包含用户自定义的对象。
用户可以使用两种方法创建RDD:读取一个外部数据集,或在驱动器程序中分发驱动器程序中的对象集合,比如list或者set。
RDD的转化操作都是惰性求值的,这意味着我们对RDD调用转化操作,操作不会立即执行。相反,Spark会在内部记录下所要求执行的操作的相关信息。我们不应该把RDD看做存放着特定数据的数据集,而最好把每个RDD当做我们通过转化操作构建出来的、记录如何计算数据的指令列表。数据读取到RDD中的操作也是惰性的,数据只会在必要时读取。转化操作和读取操作都有可能多次执行。
2.创建RDD数据集
1
JavaSparkContext sc=JavaSparkContext.getSparkContext();
JavaRDD<String> lines = sc.textFile(file流);
2 JavaRDD<String> temp=sc.parellalize(list列表)
3 JavaRDD 转化为list
List<String> list1 =list.collect();
4 合并RDD
JavaRDD<String> list2=temp.union(temp2);
5取值
temp.take(i) 获取rdd的前i个值
6 传递函数
avaRDD<String> errorLines=lines.filter(
new Function<String, Boolean>() {
public Boolean call(String v1)throws Exception {
return v1.contains("error");
}
}
);
Function<T,R>: R call(T) 接收一个输入值并返回一个输出值,用于类似map()和filter()的操作中
Function<T1,T2,R>:
R call(T1,T2)接收两个输入值并返回一个输出值,用于类似aggregate()和fold()等操作中
FlatMapFunction<T,R>
Iterable <R> call(T)接收一个输入值并返回任意个输出,用于类似flatMap()这样
Function<T,R> R call(T)
接收一个输入值并返回一个输出值,用于类似map()和filter()的操作中
Function<T1,T2,R>
R call(T1,T2)
接收两个输入值并返回一个输出值,用于类似aggregate()和fold()等操作中
FlatMapFunction<T,R>
Iterable <R> call(T)
接收一个输入值并返回任意个输出,用于类似flatMap()这样的操作中