大数据课程K2——Spark的RDD弹性分布式数据集

这篇具有很好参考价值的文章主要介绍了大数据课程K2——Spark的RDD弹性分布式数据集。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章作者邮箱:yugongshiye@sina.cn              地址:广东惠州

 ▲ 本章节目的

⚪ 了解Spark的RDD结构;

⚪ 掌握Spark的RDD操作方法;

⚪ 掌握Spark的RDD常用变换方法、常用执行方法;

一、Spark最核心的数据结构——RDD弹性分布式数据集

1. 概述

初学Spark时,把RDD看做是一个集合类型(类似于Array或List),用于存储数据和操作数据,但RDD和普通集合的区别:

1. RDD有分区机制,可以分布式,并行的处理同一个RDD数据集,从而极大提高处理效率。分区数量由程序员自己定。

2. RDD由容错机制。即数据丢失后,可以进行恢复。

大数据课程K2——Spark的RDD弹性分布式数据集,大数据,spark,分布式

2. 创建RDD方法

RDD就是带有分区的集合类型

弹性分布式数据集(RDD),特点是可以并行操作,并且是容错的。有两种方法可以创建RDD:

1. 执行Transform操作(变换操作)。即将一个普通集合(Array或List)转变为一个RDD。

例如:val r1 = sc.parallelize(a1,2)

或 val r1 = sc.makeRDD(List(1,2,3,4),2)

查看分区数量:r1.partitions.size。

查看分区数据:r1.glom.collect。

查看RDD整体数据:r1.collect。

2. 读取外部存储系统的数据集,如HDFS,HBase,或任何与Hadoop有关的数据源。

读取Linux本地文件:val r4 = sc.textFile("file:home/1.txt",2)

读取hds文件:val r5 = sc.textFile("hdfs://hadoop01:9000/1.txt",2)

3. RDD入门示例

案例一:

并行化集合可以通过调用 Spark Context 的并行化方法被创建,这个方法是在驱动程序(Scala-Seq)中的现有集合上的。集合里的参数会被拷贝到可以并行执行的分布式数据集里。如下例子就是如何创建一个包含了 1 到 5 的并行化集合。例如:

val data = Array(1, 2, 3, 4, 5)               

val r1 = sc.parallelize(data)         

val r2 = sc.parallelize(data,2)      

你可以这样理解RDD:它是spark提供的一个特殊集合类。诸如普通的集合类型,如传统的Array:(1,2,3,4,5)是一个整体,但转换成RDD后,我们可以对数据进行Partition(分区)处理,这样做的目的就是为了分布式。

你可以让这个RDD有两个分区,那么有可能是这个形式:RDD(1,2) (3,4)。

这样设计的目的在于:可以进行分布式运算。

注:创建RDD的方式有多种,比如案例一中是基于一个基本的集合类型(Array)转换而来,像parallelize这样的方法还有很多,之后就会学到。此外,我们也可以在读取数据集时就创建RDD。

案例二:

Spark能够从任何基于Hadoop的存储资源,创建分布式数据集。包括本地文件系统、HDFS、Cassandra、HBase、Amazon S3等等。Spark支持TEXT文件格式、SequenceFiles文件格式和其他Hadoop的输入文件格式。

RDD的TEXT文件能够通过SparkContext的方法创建。这个方法获取一个文件的URI路径(可以是本地路径、或者是hdfs://, s3n://等),然后当作一条数据集读取其中内容。例如:

val distFile = sc.textFile("data.txt")

4. 查看RDD

scala>rdd.collect

收集rdd中的数据组成Array返回,此方法将会把分布式存储的rdd中的数据集中到一台机器中组建Array。

在生产环境下一定要慎用这个方法,容易内存溢出。

查看RDD的分区数量:

scala>rdd.partitions.size

查看RDD每个分区的元素:

scala>rdd.glom.collect

此方法会将每个分区的元素以Array形式返回。

5. 分区概念

在下图所示, 一个RDD有item1~item25个数据,共5个分区,分别在3台机器上进行处理。

大数据课程K2——Spark的RDD弹性分布式数据集,大数据,spark,分布式

此外,spark并没有原生的提供rdd的分区查看工具我们可以自己来写一个。

案例三:

import org.apache.spark.rdd.RDD

import scala.reflect.ClassTag

object su {

def debug[T: ClassTag](rdd: RDD[T]) = {

rdd.mapPartitionsWithIndex((i: Int, iter: Iterator[T]) => {

val m = scala.collection.mutable.Map[Int, List[T]]()

var list = List[T]()

while (iter.hasNext) {

list = list :+ iter.next

}

m(i) = list

m.iterator

}).collect().foreach((x: Tuple2[Int, List[T]]) => {

val i = x._1

println(s"partition:[$i]")

x._2.foreach { println }

})

}

}

 二、RDD的操作

1. 概述

对于RDD的操作,总的来分有三种:

1. Transformation变化操作,特点是都是懒操作,调用后并不是马上执行,比如典型的textFile方法。此外,每当调用一次变化操作(懒操作),就会产生一个新的RDD。

2. Action执行操作,特点是会触发执行。

3. Controller控制操作。

大数据课程K2——Spark的RDD弹性分布式数据集,大数据,spark,分布式

 大数据课程K2——Spark的RDD弹性分布式数据集,大数据,spark,分布式

 大数据课程K2——Spark的RDD弹性分布式数据集,大数据,spark,分布式

 大数据课程K2——Spark的RDD弹性分布式数据集,大数据,spark,分布式

 大数据课程K2——Spark的RDD弹性分布式数据集,大数据,spark,分布式

 2. 常用的变化方法(懒方法):

Transformation Meaning

map(func)

Return a new distributed dataset formed by passing each element of the source through a function func.

返回一个新的分布式数据集,通过函数应用于RDD每一个元素,该方法的参数是一个函数

案例:

map 将函数应用到rdd的每个元素中

val rdd = sc.makeRDD(List(1,3,5,7,9))文章来源地址https://www.toymoban.com/news/detail-659333.html

到了这里,关于大数据课程K2——Spark的RDD弹性分布式数据集的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大数据开源框架环境搭建(七)——Spark完全分布式集群的安装部署

    前言:七八九用于Spark的编程实验 大数据开源框架之基于Spark的气象数据处理与分析_木子一个Lee的博客-CSDN博客_spark舆情分析 目录 实验环境: 实验步骤: 一、解压 二、配置环境变量:  三、修改配置文件  1.修改spark-env.sh配置文件: 2.修改配置文件slaves: 3.分发配置文件:

    2024年02月11日
    浏览(49)
  • 云计算与大数据第16章 分布式内存计算平台Spark习题

    1、Spark是Hadoop生态(  B  )组件的替代方案。 A. Hadoop     B. MapReduce        C. Yarn             D.HDFS 2、以下(  D  )不是Spark的主要组件。 A. Driver      B. SparkContext       C. ClusterManager D. ResourceManager 3、Spark中的Executor是(  A  )。 A.执行器      B.主节

    2024年02月14日
    浏览(104)
  • 分布式计算中的大数据处理:Hadoop与Spark的性能优化

    大数据处理是现代计算机科学的一个重要领域,它涉及到处理海量数据的技术和方法。随着互联网的发展,数据的规模不断增长,传统的计算方法已经无法满足需求。因此,分布式计算技术逐渐成为了主流。 Hadoop和Spark是目前最为流行的分布式计算框架之一,它们都提供了高

    2024年01月23日
    浏览(54)
  • 微服务的艺术:构建可扩展和弹性的分布式应用

    🎉欢迎来到架构设计专栏~微服务的艺术:构建可扩展和弹性的分布式应用 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:架构设计 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技术和水平

    2024年02月07日
    浏览(199)
  • 数据存储和分布式计算的实际应用:如何使用Spark和Flink进行数据处理和分析

    作为一名人工智能专家,程序员和软件架构师,我经常涉及到数据处理和分析。在当前大数据和云计算的时代,分布式计算已经成为了一个重要的技术方向。Spark和Flink是当前比较流行的分布式计算框架,它们提供了强大的分布式计算和数据分析功能,为数据处理和分析提供了

    2024年02月16日
    浏览(58)
  • 阿里云 ACK 云原生 AI 套件中的分布式弹性训练实践

    作者:霍智鑫 众所周知,随着时间的推移,算力成为了 AI 行业演进一个不可或缺的因素。在数据量日益庞大、模型体量不断增加的今天,企业对分布式算力和模型训练效率的需求成为了首要的任务。如何更好的、更高效率的以及更具性价比的利用算力,使用更低的成本来训

    2024年01月25日
    浏览(44)
  • Jenkins分布式实现: 构建弹性和可扩展的CI/CD环境!

    Jenkins是一个流行的开源持续集成(Continuous Integration,CI)和持续交付(Continuous Delivery,CD)工具,它通过自动化构建、测试和部署过程,帮助开发团队更高效地交付软件。Jenkins的分布式实现允许将任务分散到多个计算机上执行,从而提高系统的弹性和可扩展性。本文将深入

    2024年02月01日
    浏览(60)
  • 分布式计算框架:Spark、Dask、Ray 分布式计算哪家强:Spark、Dask、Ray

    目录 什么是分布式计算 分布式计算哪家强:Spark、Dask、Ray 2 选择正确的框架 2.1 Spark 2.2 Dask 2.3 Ray 分布式计算是一种计算方法,和集中式计算是相对的。 随着计算技术的发展, 有些应用需要非常巨大的计算能力才能完成,如果采用集中式计算,需要耗费相当长的时间来完成

    2024年02月11日
    浏览(63)
  • Spark单机伪分布式环境搭建、完全分布式环境搭建、Spark-on-yarn模式搭建

    搭建Spark需要先配置好scala环境。三种Spark环境搭建互不关联,都是从零开始搭建。 如果将文章中的配置文件修改内容复制粘贴的话,所有配置文件添加的内容后面的注释记得删除,可能会报错。保险一点删除最好。 上传安装包解压并重命名 rz上传 如果没有安装rz可以使用命

    2024年02月06日
    浏览(75)
  • spark分布式解压工具

    ​ spark解压缩工具,目前支持tar、gz、zip、bz2、7z压缩格式,默认解压到当前路下,也支持自定义的解压输出路径。另外支持多种提交模式,进行解压任务,可通过自定义配置文件,作为spark任务的资源设定 2.1 使用hadoop的FileSystem类,对tos文件的进行读取、查找、写入等操作

    2024年02月02日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包