Spark_RDD之RDD操作简介

1.转化操作

  转化操作是返回一个新的RDD的操作,我们可以使用filter()方法进行转化。举个使用scala进行转化操作的例子。

  def main(args: Array[String]): Unit = {
    val conf = new SparkConf();
    conf.setAppName("trans");
    conf.setMaster("local");
    //SparkContext对象代表对Spark集群的一个连接
    val sc = new SparkContext (conf);
    val inputRdd = sc.textFile("E:\\file\\word.txt");
    //转化操作 filter(),过滤出inputRdd中是"daijun"的字符串
    val daijunRdd = inputRdd.filter(daijun => daijun.contains("daijun"));
    println(daijunRdd.countByValue());
  }

  其对应的Java代码如下:

    public static void main(String[] args) {
        SparkConf conf = new SparkConf();
        conf.setAppName("trans");
        conf.setMaster("local");
        JavaSparkContext sc = new JavaSparkContext(conf);
        JavaRDD<String> rdd = sc.textFile("E:\\file\\word.txt");
        JavaRDD<String> daijunRdd = rdd.filter(new Function<String, Boolean>() {
            private static final long serialVersionUID = 1L;
            public Boolean call(String x) throws Exception {
                return x.contains("daijun");
            }
        });
        System.out.println(daijunRdd.countByValue().toString());
        sc.close();
    }

2.行动操作

  行动操作时对RDD进行实际的计算的操作,产生实际的输出。在以上的基础上,举一个行动操作的例子,我们使用count()方法来取得我们想要的单词的个数。

  scala代码:

   def main(args: Array[String]): Unit = {
    val conf = new SparkConf();
    conf.setAppName("trans");
    conf.setMaster("local");
    //SparkContext对象代表对Spark集群的一个连接
    val sc = new SparkContext(conf);
    val inputRdd = sc.textFile("E:\\file\\word.txt");
    //转化操作 filter(),过滤出inputRdd中是"daijun"的字符串
    val daijunRdd = inputRdd.filter(daijun => daijun.contains("daijun"));
    //使用count()方法 返回计数结果
    println(daijunRdd.count());
    daijunRdd.take(2).foreach(println);
  }

  Java代码

    public static void main(String[] args) {
        SparkConf conf = new SparkConf();
        conf.setAppName("trans");
        conf.setMaster("local");
        JavaSparkContext sc = new JavaSparkContext(conf);
        JavaRDD<String> rdd = sc.textFile("E:\\file\\word.txt");
      //JavaRDD<String> daijunRdd = rdd.filter(s -> s.contains("daijun"));
        JavaRDD<String> daijunRdd = rdd.filter(new Function<String, Boolean>() {
            private static final long serialVersionUID = 1L;

            public Boolean call(String x) throws Exception {
                return x.contains("daijun");
            }
        });
        System.out.println(daijunRdd.count());
        for(String line: daijunRdd.take(2)){
            System.out.println(line);
        }
        sc.close();
    }

 note:在调用一个新的行动操作时,RDD都会从头计算,会使效率低下。要避免这种行为,可以将RDD持久化。

3.惰性求值

  意思是在RDD进行行动操作之前Spark不会开始计算。在进行转化操作时,Spark会记录相关操作的信息,在需要时才会去执行它。

猜你喜欢

转载自www.cnblogs.com/dj-blog/p/9290621.html