Spark java 笔记

1.  必须作用在K ,  V 格式的RDD上的算子

GroupByKey,  reduceByKey,  join, sortByKey   因为这些算子会产生 shuffle,  所以必须必须作用在 K,  V  格式的RDD上

2. Spark任务执行的流程

  Driver(进程) 作用:

    任务的分发

    接收 task 的执行结果

    接收 task 的执行情况

    心跳

    总结: Driver会跟集群进行频繁的通信

3. 算子

  1. 转换算子

    1. map 算子 ,  对一行数据进行处理,  结果还是一行数据

public static void main(String[] args) {
        String path = "/home/test/b.txt";
        SparkConf conf = new SparkConf().setAppName("sparkTest").setMaster("local");
        JavaSparkContext sc = new JavaSparkContext(conf);
        
        JavaRDD<String> linesRdd = sc.textFile(path);
        
        JavaRDD<String> mapRdd = linesRdd.map(new Function<String, String>() {

            private static final long serialVersionUID = 1L;

            @Override
            public String call(String line) throws Exception {
                System.out.println(line+"=======");
                return null;
            }
        });
        long count = mapRdd.count();
        System.out.println(count);
    }
View Code

    2. flatMap 算子,  会对 list 中的没一条作为一条新记录来对待

public static void main(String[] args) {
        String path = "/home/test/b.txt";
        SparkConf conf = new SparkConf().setAppName("sparkTest").setMaster("local");
        JavaSparkContext sc = new JavaSparkContext(conf);
        
        JavaRDD<String> linesRdd = sc.textFile(path);
        
        JavaRDD<String> flatMapRdd = linesRdd.flatMap(new FlatMapFunction<String, String>() {

            private static final long serialVersionUID = 1L;
            
            @Override
            public Iterable<String> call(String line) throws Exception {
                System.out.println(line);
                return Arrays.asList(line.split(" "));
            }
        });
        System.out.println(flatMapRdd.count());
    }
View Code

    3. mapToPair 算子,  想要将一个Rdd转换为 K,  V  格式的Rdd,  必读使用mapToPair 算子来转换

JavaPairRDD<String, Integer> mapToPairRdd = flatMapRdd.mapToPair(new PairFunction<String, String, Integer>() {

            private static final long serialVersionUID = 1L;

            @Override
            public Tuple2<String, Integer> call(String line) throws Exception {
                return new Tuple2<String, Integer>(line, 1);
            }
        });
View Code

    4. union 算子,  将 2 个类型相同的 Rdd 进行合并,  不去重

    5. cartesian 算子,  将 2 个Rdd 进行笛卡尔积 计算,   得到一个  K,  V 格式的Rdd

JavaPairRDD<String, String> cartesian = rdd1.cartesian(rdd2);

    6. groupBy 算子,  

  2. 行动算子

  3. 控制算子

    cache  是一个懒加载,  cache  默认情况下是将Rdd数据放入到内存中,linesRdd = linesRdd.cache();

    persist 可以手动指定持久化的级别, 例如: linesRdd.persist(StorageLevel.MEMORY_ONLY());  只有内存, 也就相当于了 cache

      使用 cache 和persist 的注意对象:

        1. cache 和persist的返回值必须赋值给一个变量

        2. cache和persist 算子后不能立即紧跟action类算子

    checkpoint

猜你喜欢

转载自www.cnblogs.com/redhat0019/p/9224060.html