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. Windows安装diango框架<一>

    下一篇:使用Django创建网站项目<二> python工具安装 python下载:https://www.python.org/downloads/windows/(我的版本3.7.0) ...

  2. 【Java深入研究】7、ThreadLocal详解

    ThreadLocal翻译成中文比较准确的叫法应该是:线程局部变量. 这个玩意有什么用处,或者说为什么要有这么一个东东?先解释一下,在并发编程的时候,成员变量如果不做任何处理其实是线程不安全的,各个线 ...

  3. 在使用vue-cli中遇到的几个问题

    前言:框架没有好坏之分,能解决需求就可以.之前没事用vue模仿过BOSS直聘App(纯属娱乐),实际工作中开发过一个后台管理系统,遇到过不少坑,终于闲下来稍微总结几个问题分享一下! 一.所遇到的问题( ...

  4. 百度网盘满速下载器:pandownload

    http://pandownload.com/index.html 作者提示:1.软件使用 C++ 编写2.大文件需要等待一段时间才会有下载速度3.文件名含有特殊字符可能会下载出错,请重命名再下载4. ...

  5. 初学CSS-2-文本的属性

    文本装饰属性: 格式:text-decoration:underline: 取值:underline(下划线) line-through(删除线) overline(上划线) none(什么都没有) ...

  6. 洛谷P2178 [NOI2015]品酒大会(后缀自动机 线段树)

    题意 题目链接 Sol 说一个后缀自动机+线段树的无脑做法 首先建出SAM,然后对parent树进行dp,维护最大次大值,最小次小值 显然一个串能更新答案的区间是\([len_{fa_{x}} + 1 ...

  7. 如何将web项目部署到Ubuntu服务器上

    情景回顾: 前几天在下本着人道主义原则帮我老师的一个朋友做了个小网页,(啥人道不人道的,主要是给钱了),做完之后本来是想偷懒直接把网页扔给他自己部署去吧,结果让我帮忙部署一下,得,偷懒也偷不成了,搞吧 ...

  8. python之socketserver ftp功能简单讲解

    TCP协议中的socket一次只能和一个客户端通信,然而socketserver可以实现和多个客户端通信. 它是在socket的基础上进行了一层封装,底层还是调用的socket # 服务端 impor ...

  9. CSS3圆圈动画放大缩小循环动画效果

    代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" c ...

  10. 爬虫 scrapy 笔记

    scrapy 基础 1.  创建一个spider项目 a)         Scrapy startproject project_name [project_dir] b)         Cd p ...