RDD (resilient distributed dataset) ,弹性分布式数据集,表示分布在多个计算节点上可以并行操作的元素集合,是spark主要的编程抽象。
Spark的各个组件如下图:
Java中初始化Spark:
SparkConf conf = new SparkConf().setMaster(URL).setAppName("name");
JavaSparkContext sc = new JavaSparkContext(conf);
RDD支持两种操作:转化操作和行动操作。
转化操作会由一个RDD生成一个新的RDD。
行动操作会对RDD计算出一个结果,并把结果返回到驱动器程序中,或者把结果存储到外部存储系统中。
两种操作的区别在于Spark计算RDD的方式不同。你可以在任何时候定义一个新的RDD,但是Spark只会惰性计算这些RDD。只有第一次在一个行动操作中用到时,才会真正计算。
RDD.persist()可以用来让spark把这个RDD缓存下来,持久化后方便重复对该RDD进行计算
下图来解释map() 和 flatMap() 的区别,一目了然: