1.rdd的初始化

  1.1 读取文件来初始化rdd(通过sparkContext的textFile方法)

    1.1.1 读取本地文件

     SparkConf conf = new SparkConf().setAppName("LocalWordCount").setMaster("local");// 指定运行在本地
JavaSparkContext sparkContext = new JavaSparkContext(conf);
// 返回每一行作为一个元素的rdd
JavaRDD<String> lines = sparkContext
.textFile("C://Users//yanglin//Desktop//bb.txt", 5); // 返回为JavaRDD[String]

    1.1.2 读取hdfs文件

      //返回每一行作为一个元素的rdd
JavaRDD<String> lines=sparkContext.textFile("hdfs://hadoop-senior.ibeifeng.com:8020/user/yanglin/spark/wc.input", 5);//返回为JavaRDD[String]

  1.2 并行化集合来初始化rdd(通过sparkContext.)

    JavaPairRDD<Integer, String> students = context.parallelizePairs(
Arrays.asList(new Tuple2<Integer, String>(1, "zhangsan"),
new Tuple2<Integer, String>(2, "lisi"),
new Tuple2<Integer, String>(3, "wangwu"),
new Tuple2<Integer, String>(4, "zhaoliu")),
1)

2.rdd的基本操作(分为transformation和action)

  2.1 Spark支持两种RDD操作:transformation和action

    2.1.1 区别

      transformation操作会针对已有的RDD创建一个新的RDD;

      action则主要是对RDD进行最后的操作,比如遍历、reduce、保存到文件等,并可以返回结果给Driver程序。
    2.1.2 特性

      transformation的特点就是lazy特性:transformation是不会触发spark程序的执行的,它们只是记录了对RDD所做的操作,但是不会自发的执行。只有当transformation之后,接着执行了一            个action操作,那么所有的transformation才会执行。

      action操作执行,会触发一个spark job的运行,从而触发这个action之前所有的transformation的执行。

  2.2 常用transformation操作

    2.2.1 flatMap   将有嵌套类型的集合转换为没有嵌套的一个大集合

    // 返回每一个单词为一个元素的rdd,将每行数据按空格分割后合并为一个大的集合
JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
private static final long serialVersionUID = 2192898403909387476L;
public Iterable<String> call(String line) throws Exception {
return Arrays.asList(line.split(" "));
}
});

    2.2.2  map (在java中分为map和mapToPair,在scala中只有map),将一个rdd转换为另一个rdd

    // 返回每一个单词的映射
JavaPairRDD<String, Integer> wordPairs = words
.mapToPair(new PairFunction<String, String, Integer>() {
private static final long serialVersionUID = -4729349390159625475L;
public Tuple2<String, Integer> call(String word) throws Exception {
return new Tuple2<String, Integer>(word, 1);
}
});

    2.2.3 reduceByKey (根据key分组和进行reduce操作)

    // 单词数的叠加
JavaPairRDD<String, Integer> wordCountPairs = wordPairs
.reduceByKey(new Function2<Integer, Integer, Integer>() {
private static final long serialVersionUID = -8636811420038190538L;
public Integer call(Integer v1, Integer v2) throws Exception {
return v1 + v2;
}
});

    2.2.4 filter (过滤符合要求的数据,生成一个新的rdd)

        context.parallelize(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
.filter(new Function<Integer, Boolean>() {
private static final long serialVersionUID = 1L;
public Boolean call(Integer val) throws Exception {
return val % 2 == 0;//获取偶数
}
})

    2.2.5 reduce (从左到右依次执行reduce操作)

      Integer evenSum = context
.parallelize(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
          //过滤获取偶数
.filter(new Function<Integer, Boolean>() {
private static final long serialVersionUID = 1L;
public Boolean call(Integer val) throws Exception {
return val % 2 == 0;
}
          //计算所有偶数的和 2+4=6 6+6=12 12+8=20 20+10=30
}).reduce(new Function2<Integer, Integer, Integer>() {
private static final long serialVersionUID = 1L;
public Integer call(Integer v1, Integer v2) throws Exception {
return v1 + v2;
}
});

    2.2.6 gropuByKey(根据key进行分组,每个key对应一个Iterable<value>)

    2.2.7 sortByKey(false)(对每个key对应的value进行排序操作。)
        默认为true:表示升序;设置为false,可以按降序排列

    2.2.8 join (对两个包含<key,value>对的RDD进行join操作,每个key join上的pair,都会传入自定义函数进行处理。返回的rdd的value为两个rdd的返回元组对)

      //students对应的数据为(id,name),scores对应的数据为(id,score),join后为(id,(name,score))
      /**
         *   join的结果为:
         *  id:4 name:zhaoliu scores:21 ===============================
         *  id:1 name:zhangsan scores:69 ===============================
         *  id:1 name:zhangsan scores:68 ===============================
         *  id:3 name:wangwu scores:48 ===============================
         *  id:3 name:wangwu scores:52 ===============================
         *  id:2 name:lisi scores:35 ===============================
         *  id:2 name:lisi scores:97 ===============================
         */
      JavaPairRDD<Integer, String> students = context.parallelizePairs(
                Arrays.asList(new Tuple2<Integer, String>(1, "zhangsan"),
                        new Tuple2<Integer, String>(2, "lisi"),
                        new Tuple2<Integer, String>(3, "wangwu"),
                        new Tuple2<Integer, String>(4, "zhaoliu")),
                1);
        
      JavaPairRDD<Integer, Integer> scores = context.parallelizePairs(Arrays.asList(
                new Tuple2<Integer, Integer>(1, 69), new Tuple2<Integer, Integer>(1, 68),
                new Tuple2<Integer, Integer>(2, 35), new Tuple2<Integer, Integer>(2, 97),
                new Tuple2<Integer, Integer>(3, 48), new Tuple2<Integer, Integer>(3, 52),
                new Tuple2<Integer, Integer>(4, 21)));       JavaPairRDD<Integer, Tuple2<String, Integer>> studentScorse = students.join(scores);

    2.2.9 cogroup (同join,但是是每个key对应的Iterable<value>都会传入自定义函数进行处理)   

      //会对有相同列的元素进行合并到一个Iterable中
      /**
       * cogroup的结果:    
       * id:4 name:[zhaoliu] scores:[21]
           * id:1 name:[zhangsan] scores:[69, 68]
            * id:3 name:[wangwu] scores:[48, 52]
            * id:2 name:[lisi] scores:[35, 97]
         */
      JavaPairRDD<Integer, Tuple2<Iterable<String>, Iterable<Integer>>> studentScorse = students.cogroup(scores);

  2.3 action常用操作

    2.3.1 collect(将RDD中所有元素获取到本地客户端)

    2.3.2 count (获取RDD元素总数)

    2.3.3 take(n) (获取RDD中前n个元素)

    2.3.4 saveAsTextFile(path) (将RDD元素保存到文件中,对每个元素调用toString方法)

    2.3.5 countByKey (对每个key对应的值进行count计数)

    2.3.6 foreach (遍历RDD中的每个元素。)

spark使用02的更多相关文章

  1. Spark系列—02 Spark程序牛刀小试

    一.执行第一个Spark程序 1.执行程序 我们执行一下Spark自带的一个例子,利用蒙特·卡罗算法求PI: 启动Spark集群后,可以在集群的任何一台机器上执行一下命令: /home/spark/s ...

  2. Apache Spark源码剖析

    Apache Spark源码剖析(全面系统介绍Spark源码,提供分析源码的实用技巧和合理的阅读顺序,充分了解Spark的设计思想和运行机理) 许鹏 著   ISBN 978-7-121-25420- ...

  3. Spark 1.60的executor schedule

    第一次看源码还是Spark 1.02.这次看新源码发现调度方式有了一些新的特征,在这里随便写一下. 不变的是,master还是接收Appclient和worker的消息,并且在接收RegisterAp ...

  4. 《Apache Spark源码剖析》

    Spark Contributor,Databricks工程师连城,华为大数据平台开发部部长陈亮,网易杭州研究院副院长汪源,TalkingData首席数据科学家张夏天联袂力荐1.本书全面.系统地介绍了 ...

  5. spark之scala程序开发(集群运行模式):单词出现次数统计

    准备工作: 将运行Scala-Eclipse的机器节点(CloudDeskTop)内存调整至4G,因为需要在该节点上跑本地(local)Spark程序,本地Spark程序会启动Worker进程耗用大量 ...

  6. spark之java程序开发

    spark之java程序开发 1.Spark中的Java开发的缘由: Spark自身是使用Scala程序开发的,Scala语言是同时具备函数式编程和指令式编程的一种混血语言,而Spark源码是基于Sc ...

  7. 【原创】大数据基础之Hive(5)hive on spark

    hive 2.3.4 on spark 2.4.0 Hive on Spark provides Hive with the ability to utilize Apache Spark as it ...

  8. Spark Streaming中空batches处理的两种方法(转)

    原文链接:Spark Streaming中空batches处理的两种方法 Spark Streaming是近实时(near real time)的小批处理系统.对给定的时间间隔(interval),S ...

  9. Spark教程——(11)Spark程序local模式执行、cluster模式执行以及Oozie/Hue执行的设置方式

    本地执行Spark SQL程序: package com.fc //import common.util.{phoenixConnectMode, timeUtil} import org.apach ...

随机推荐

  1. 微信小程序(应用号)资源汇总整理

    微信小应用资源汇总整理 开源项目 WeApp - 微信小程序版的微信 wechat-weapp-redux-todos - 微信小程序集成Redux实现的Todo list wechat-weapp- ...

  2. XMLtank测试记录

    1.首先就是这个分辨率对于高分屏的电脑适应太差了....立马让我有弃的想法..(如图) 2.游戏结束之后每次都要从第一关开始,很不方便.建议加入选关功能. 3.鼠标控制不方便,尤其是左键和右键分别控制 ...

  3. [总结] JDBC数据库操作

    1.加载驱动--告诉驱动管理将使用哪一个数据库的驱动包. class.forName("com.mysql.jdbc.Driver"); 2.操作JDBC ADI完成数据库动作 D ...

  4. NLog输出目标及类型

    targets:输出目标节点 target:配置一个输出目标 Type输出类型: Console        输出到控制台 Debugger     输出到VS输出窗口 File        输出 ...

  5. eclipse中Maven创建WEB项目

    刚刚学到Maven的时候总是容易忽视到一些创建Maven项目是的步骤, 这里记录笔者熟悉一种,直接创建Maven Project 下面开始吧--- 选择web-app,没得说,然后那些groupID ...

  6. c#-冒泡排序-算法

    冒泡排序(Bubble Sort) 冒泡排序算法的运作如下: 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后 ...

  7. C# BackgroundWorker组件学习入门介绍

    C# BackgroundWorker组件学习入门介绍 一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用BackgroundWorker来完成这一功能 ...

  8. 初次了解的Java多线程

    0.1熟悉多线程 多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能 ...

  9. WCF 、Web API 、 WCF REST 和 Web Service 的区别

    WCF .Web API . WCF REST 和 Web Service 的区别 The .Net framework has a number of technologies that allow ...

  10. bootstraptable插件文档的坑

    1.事件onCheck中文档参数为row, $element正确的顺序为$element,row eg: $Table.on('check.bs.table', function ($element, ...