spark快速大数据分析之读书笔记

本文介绍了Apache Spark中RDD的基本概念及其使用方法。包括如何创建RDD、RDD支持的两种主要操作——转换操作和行动操作,以及如何通过persist()或cache()方法重用RDD。此外还解释了RDD的弹性特性。

RDD编程

1、Spark中的RDD就是一个不可变的分布式对象集合。每个RDD都被分为多个分区,这些分区运行在集群中的不同节点上。

2、用户可以使用两种方法创建RDD:读取一个外部数据集,以及在驱动器程序中对一个集合进行并行化(比如list和set)。

创建RDD最简单的方式就是把程序中一个已有的集合传给SparkContext的parallelize()方法。

val lines = sc.textFile("README.md")
val linesP = sc.parallelize(List("pandas","i like pandas"))

创建出来后,RDD支持两种类型的操作:转化操作(transformation)和行动操作(action)。转化操作会由一个RDD生成一个新的RDD。行动操作会对RDD计算出一个结果,并把结果返回到驱动器程序中,或把结果存储到外部存储系统(如HDFS)中

3、转化操作和行动操作的区别在于spark计算RDD的方式不同。如果对于一个特定的函数是属于转化操作还是行动操作感到困惑,可以看看它的返回值类型:转化操作返回的是RDD,而行动操作返回的是其他的数据类型。

虽然你可以在任何时候定义新的RDD,但spark只会惰性计算这些RDD。它们只有第一次在一个行动操作中用到时,才会真正计算。默认情况下,Spark的RDD会在你每次对它们进行行动操作时重新计算。如果想在多个行动操作中重用同一个RDD,可以使用RDD.persist(),这里也可以使用RDD.cache(),让spark把这个RDD缓存下来。

来看两个例子:

转化操作

val inputRDD = sc.textFile("log.txt")
val errorRDD = inputRDD.filter(line=>line.contains("error"))

行动操作

errorRDD.count()
for(String line:errorRDD.take(10)){
    System.out.println(line)
}

这里take()获取了RDD中的少量元素。除此这外,RDD中还有一个获取元素的方法,collect()函数,但是只有当整个数据集能在单台机器的内存中放得下时,才能使用collect(),因此,collect()不能用在大规模数据集上。

4、之所以把RDD称为弹性的,是因为在任何时候都能进行重算。当保存RDD数据的一台机器失败时,Spark还可以使用这种特性来重算出丢掉的分区。

5、总结一下,每个spark程序或shell对话都按如下方式工作:

(1)从外部数据创建出输入RDD。

(2)使用诸如filter()这样的转化操作对RDD进行转化,以定义新的RDD。

(3)告诉spark对需要被重用的中间结果RDD执行persist()操作。

(4)使用行动操作(例如count()和first()等)来触发一次并行计算,spark会对计算进行优化后再执行。


转载于:https://my.oschina.net/sucre/blog/617340

DOI:10.16525/j.cnki.14-1362/n.2019.10.31 总第 184 期 2019 年第10 期 Total of 184 No.10, 2019 大数据 收稿日期: 2019-08-16 第一作者简介: 林海 (1989—) , 男, 本科, 研究方向为飞行 教育。 基于大数据下的 Spark 快速大数据分析 林 海, 王 强, 李英震 (空军航空大学初级飞行训练基地二团, 黑龙江 哈尔滨 150100) 摘 要: 在数据大爆炸的时代, 随着数据量的激增, 如何更快速地处理、 使用这些规模大、 复杂度高的数据成为 迫在眉睫的问题。阐述了 Spark 的五大组件,研究了 Spark 数据处理应用和运行架构。Spark 通过优化传统的 MapReduce 模型来满足之前 HDFS 以及 MapReduce 无法解决的问题, 大大提高了效率, 为处理流式数据以及 其他需求提供了捷径。 关键词: 大数据; 数据分析; 计算; 数据处理 中图分类号: TP311 文献标识码: A 文章编号: 2095-0748 (2019) 10-0075-02 现代工业经济和信息化 Modern IndustrialEconomy and Informationization 引言 随着科学技术和社会经济的高速发展, 我们已经 处于一个数据大爆炸的时代, 手机、 ipad 以及其他的 物联网设备每分每秒都会产生大量的全新数据, 这 些数据不仅数量大,而且更加复杂,来源也越来越 广。 据科学家预测, 到 2020 年, 将会有 600 多亿台的 互联网设备产生 Zeta 级的数据, 所以如何更加合理 快速地处理并且使用这些规模大、复杂度高的数据 成为我们迫在眉睫需要解决的问题。 随着数据量的快速增长,以及一些公司对数据 进行实时计算和实时处理的要求,传统的 MapRe- duce 模型已经无法满足这些要求, 而且更加重要的是 MapReduce 在进行 Shuffle 时会产生大量的 I/O, 使 得效率变低。 Spark 的出现扩展了传统的 MapReduce 模型, 不但能提供更多更加高效的计算模型, 还能够 适用于多种不同的分布式平台场景上。同时 Spark 还可以让使用者们简单而低消耗地将各种处理流程 整合到一起,这样既满足了对实时计算以及实时处 理的要求, 还减轻了对各种平台分别管理的负担[1]。 1 Spark 的五大组件 在 spark Core 中实现了 Spark 的一些基础的功 能, 例如进行内存的管理、 进行错误的恢复、 对任务 的调度、 与存储系统进行交互等功能。 它还包含了对 弹性分布式数据集的 API 定义。 Spark SQL 是被用来对结构化数据进行操作 的程序包, 它支持多种数据源, 例如 Hive 表、 JSON、 Parquet 等, 还可以使用 HQL 来进行数据的查询。 Spark Streaming 能够对实时的数据进行流式计 算。 它具有准时的特点, 同时提供离散化流数据的高 级抽象概念, 以此来表示连续的数据流。 离散流是可 以来自 Flume、 Kafka 等输入源的输入数据流来创 建, 进行批处理, 时间一般是秒级。 MLib 是 Spark 提供的一个常见的机器学习功能 的程序库, 它提供了许许多多的机器学习算法, 这些 算法中包括了回归、 聚类、 分类、 协同过滤、 数据导 入、 模型评估等功能。 Graphx 是能够进行并行操作的图计算,可以用 来操作图的程序库。 2 Spark 数据处理应用 众所周知因为 MapReduce 在交互计算以及迭 代计算任务上的效率比较低,所以 Spark 出现了, Spark 的出现使得交互式查询以及迭代计算效率大 大增加,不但如此它还支持高效的容错机制和内存 式存储。Spark 不仅仅能够将 HDFS (分布式文件系 统) 上面的文件读取为分布式数据集, 还支持本地文 件、 Hive、 HBase 等。 每一个 Spark 应用都会由一个驱动 器程序 (Driver Program) 来发起集群上的并行操作[2]。 3 Spark 的运行架构 在 HDFS 的环境下, Spark 采取的是 Master/Slave, 即主从架构,也就是由一个主节点来负责中央的协 调, 调度其他每个分布式节点, 其中负责中央协调的 节点就称为驱动器节点,也就是我们所说的 Driver 第 9 卷 现代工业经济和信息化 xdgyjjxxhx@163.com (上接第 74 页) Application of Big Data in Human Resource Management Wang Xiaoli (Shanxi Provincial Pers
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值