RDD 介绍

RDD,全称Resilient Distributed Datasets(弹性分布式数据集),是Spark最为核心的概念,是Spark对数据的抽象。RDD是分布式的元素集合,每个RDD只支持读操作,且每个RDD都被分为多个分区存储到集群的不同节点上。除此之外,RDD还允许用户显示的指定数据存储到内存和磁盘中,掌握了RDD编程是SPARK开发的第一步。

1:创建操作(creation operation):RDD的创建由SparkContext来负责。
2:转换操作(transformation operation):将一个RDD通过一定操作转换为另一个RDD。
3:行动操作(action operation):Spark为惰性计算,对RDD的行动操作都会触发Spark作业的运行
4:控制操作(control operation):对RDD进行持久化等。

DEMO代码地址:https://github.com/zhp8341/sparkdemo/blob/master/src/main/java/com/demo/spark/rdddemo/OneRDD.java

一:创建操作

创建RDD有两种方式:
1 读取一个数据集(SparkContext.textFile()) :

JavaDStreamlines=jssc.textFileStream("/Users/huipeizhu/Documents/sparkdata/input/"); 
JavaReceiverInputDStreamlines = jssc.socketTextStream("localhost", 9999);

2 读取一个集合(SparkContext.parallelize()) :

Listlist = Arrays.asList(5, 4, 3, 2, 1);
JavaRDDrdd = sc.parallelize(list);

二:转换操作

1:单个RDD转换操作
map() : 对每个元素进行操作,返回一个新的RDD
System.out.println("RDD每个元素乘10:" + rdd.map(v -> v * 10)

filter() : 最每个元素进行筛选,返回符合条件的元素组成的一个新RDD
System.out.println("RDD去掉1的元素:" + rdd.filter(v -> v != 1));

flatMap() : 对每个元素进行操作,将返回的迭代器的所有元素组成一个新的RDD返回
r.dd.flatMap(x -> x.to(3)).collect()

distinct():去重操作
System.out.println("RDD去重操作:" + rdd.distinct());

rdd最大和最小值

Integer max=  rdd.reduce((v1, v2) -> Math.max(v1, v2));

Integer min=  rdd.reduce((v1, v2) -> Math.min(v1, v2))

2:两个RDD的转化操作:

[1, 2, 3] [3, 4, 5] 两个个RDD简单相关操作

union() :合并,不去重
System.out.println("两个RDD集合:" + rdd1.union(rdd2).collect());

intersection() :交集
System.out.println("两个RDD集合共同元素:" + rdd1.intersection(rdd2).collect());

cartesian() :笛卡儿积
System.out.println("和另外一个RDD集合的笛卡尔积:" + rdd1.cartesian(rdd2).collect());

subtract() : 移除相同的内容
rdd1.subtract(rdd2).collect()

三:行动操作

collect() :返回所有元素
System.out.println("原始数据:" + rdd.collect());

count() :返回元素个数
System.out.println("统计RDD的所有元素:" + rdd.count());

countByValue() : 各个元素出现的次数
System.out.println("每个元素出现的次数:" + rdd.countByValue());

take(num) : 返回num个元素
System.out.println("取出rdd返回2个元素:" + rdd.take(2));

top(num) : 返回前num个元素
System.out.println("取出rdd返回最前2个元素:" + rdd.top(2));

reduce(func) :并行整合RDD中的所有数据(最常用的)
System.out.println("整合RDD中所有数据(sum):" + rdd.reduce((v1, v2) -> v1 + v2));

foreach(func):对每个元素使用func
rdd.foreach(t -> System.out.print(t));

四:控制操作

cache():

persist():保留着RDD的依赖关系

checkpoint(level:StorageLevel):RDD[T]切断RDD依赖关系

所谓的控制操作就是持久化
你能通过persist()或者cache()方法持久化一个rdd。首先,在action中计算得到rdd;然后,将其保存在每个节点的内存中。Spark的缓存是一个容错的技术-如果RDD的任何一个分区丢失,它
可以通过原有的转换(transformations)操作自动的重复计算并且创建出这个分区。
此外,我们可以利用不同的存储级别存储每一个被持久化的RDD。
Spark自动的监控每个节点缓存的使用情况,利用最近最少使用原则删除老旧的数据。如果你想手动的删除RDD,可以使用RDD.unpersist()方法。
在实际操作当中我们可以借助第三方进行数据持久化 如:redis

Spark学习之JavaRdd的更多相关文章

  1. [转]Spark学习之路 (三)Spark之RDD

    Spark学习之路 (三)Spark之RDD   https://www.cnblogs.com/qingyunzong/p/8899715.html 目录 一.RDD的概述 1.1 什么是RDD? ...

  2. Spark学习之数据读取与保存(4)

    Spark学习之数据读取与保存(4) 1. 文件格式 Spark对很多种文件格式的读取和保存方式都很简单. 如文本文件的非结构化的文件,如JSON的半结构化文件,如SequenceFile结构化文件. ...

  3. Spark学习之RDD编程(2)

    Spark学习之RDD编程(2) 1. Spark中的RDD是一个不可变的分布式对象集合. 2. 在Spark中数据的操作不外乎创建RDD.转化已有的RDD以及调用RDD操作进行求值. 3. 创建RD ...

  4. spark学习收集

    spark优化: http://www.cnblogs.com/hark0623/p/5533803.html 董西成学生写的经验分享(很详细很强大) spark官网 API http://spark ...

  5. Spark学习笔记3——RDD(下)

    目录 Spark学习笔记3--RDD(下) 向Spark传递函数 通过匿名内部类 通过具名类传递 通过带参数的 Java 函数类传递 通过 lambda 表达式传递(仅限于 Java 8 及以上) 常 ...

  6. Spark学习笔记2——RDD(上)

    目录 Spark学习笔记2--RDD(上) RDD是什么? 例子 创建 RDD 并行化方式 读取外部数据集方式 RDD 操作 转化操作 行动操作 惰性求值 Spark学习笔记2--RDD(上) 笔记摘 ...

  7. Spark学习笔记1——第一个Spark程序:单词数统计

    Spark学习笔记1--第一个Spark程序:单词数统计 笔记摘抄自 [美] Holden Karau 等著的<Spark快速大数据分析> 添加依赖 通过 Maven 添加 Spark-c ...

  8. Spark学习(一) -- Spark安装及简介

    标签(空格分隔): Spark 学习中的知识点:函数式编程.泛型编程.面向对象.并行编程. 任何工具的产生都会涉及这几个问题: 现实问题是什么? 理论模型的提出. 工程实现. 思考: 数据规模达到一台 ...

  9. Spark学习笔记之SparkRDD

    Spark学习笔记之SparkRDD 一.   基本概念 RDD(resilient distributed datasets)弹性分布式数据集. 来自于两方面 ①   内存集合和外部存储系统 ②   ...

随机推荐

  1. HDFS的副本存放策略(全)

    HDFS的副本存放策略   HDFS作为Hadoop中的一个分布式文件系统,而且是专门为它的MapReduce设计,所以HDFS除了必须满足自己作为分布式文件系统的高可靠性外,还必须为MapReduc ...

  2. Java框架之Spring(三)

    本文主要介绍Spring中, 1 Bean 的 init-method 和 destroy-method 2 集合类型的装配 3 注解方式装配 4 以自动扫描把组件纳入spring容器中管理 5 代理 ...

  3. 【Java并发编程】21、线程池ThreadPoolExecutor源码解析

    一.前言 JUC这部分还有线程池这一块没有分析,需要抓紧时间分析,下面开始ThreadPoolExecutor,其是线程池的基础,分析完了这个类会简化之后的分析,线程池可以解决两个不同问题:由于减少了 ...

  4. SSM+solr 通过商品搜索学习solr的简单使用

    学习了一下https://github.com/TyCoding/ssm-redis-solr这个github上的solr搜索功能,现在来记录一下. 我的理解就是solr有点类似于数据库,但它是有索引 ...

  5. 【读书笔记】iOS-如何推销你的Web应用

    1,利用Beta测试来邀请测试者. 2,利用新闻发布. 3,创建Web应用的宣传网站. 4,使用邮件营销. 5,创建YouTube视频教程. 6,提交到苹果Web应用门户. 7,提交到其它Web应用门 ...

  6. SAP MM PIR里的Lower Limit & Upper Limit

    SAP MM PIR里的Lower Limit & Upper Limit 在PIR的价格的detail数据里,有2个字段:Lower Limit和Upper Limit.在今天之前,笔者从未 ...

  7. Linux LB--负载均衡和高可靠

    1.负载均衡典型应用场景,外网.内网.私网公共服务. 典型场景: (1)用户通过公网访问数据中心的ftp.web.https服务器. (2) 在数据中心内部东西向访问其他服务时,例如,访问其他虚拟机. ...

  8. MVC与单元测试实践之健身网站(七)-添加计划

    ​计划的制定涉及到周期-动作包-动作的关联操作,在上一篇<计划的添加与重置>完成了周期的设置.动作包的添加,现在要完成的是动作的添加操作. 一 具体功能 a) 在选定了一个大周期具有的天数 ...

  9. Kotlin入门(2)让App开发变得更容易

    上一篇文章介绍了如何搭建Kotlin的开发环境,可是这个开发环境依然基于Android Studio,而在Android Studio上使用Java进行编码,本来就是理所应当的,何必还要专门弄个Kot ...

  10. exception is feign.RetryableException: Connection refused (Connection refused) executing GET http://......

    2018-03-23 10:00:58.430 ERROR 31889 --- [nio-4321-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Se ...