Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Spark RDD 基础

Spark RDD 基础

作者头像
李振
发布于 2021-11-26 06:58:48
发布于 2021-11-26 06:58:48
56800
代码可运行
举报
文章被收录于专栏:乱码李乱码李
运行总次数:0
代码可运行

RDD 是什么?

[图片摘自[Spark 官网](http://spark.apache.org/)]

RDD 全称 Resilient Distributed Datasets,是 Spark 中的抽象数据结构类型,任何数据在Spark中都被表示为RDD。 Spark 建立在统一抽象的RDD之上,使得它可以以基本一致的方式应对不同的大数据处理场景,包括MapReduce,Streaming,SQL,Machine Learning 等。

简单的理解就是 RDD 就是一个数据结构,不过这个数据结构中的数据是分布式存储的,Spark 中封装了对 RDD 的各种操作,可以让用户显式地将数据存储到磁盘和内存中,并能控制数据的分区。

RDD 特性

RDD 是 Spark 的核心,也是整个 Spark 的架构基础。它的特性可以总结如下:

  • 它是不变的数据结构存储
  • 它是支持跨集群的分布式数据结构
  • 可以根据数据记录的key对结构进行分区
  • 提供了粗粒度的操作,且这些操作都支持分区
  • 它将数据存储在内存中,从而提供了低延迟性

创建 RDD

本文中的例子全部基于 Spark-shell,需要的请自行安装。

创建 RDD 主要有两种方式,一种是使用 SparkContext 的 parallelize 方法创建并行集合,还有一种是通过外部外部数据集的方法创建,比如本地文件系统HDFSHBaseCassandra等。

并行集合

使用 parallelize 方法从普通数组中创建 RDD:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scala> val a = sc.parallelize(1 to 9, 3)
a: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at <console>:21

parallelize 方法接受两个参数,第一个是数据集合,第二个是切片的个数,表示将数据存放在几个分区中。

一旦创建完成,这个分布式数据集(a)就可以被并行操作。例如,我们可以调用 a.reduce((m, n) => m + n) 将这个数组中的元素相加。 更多的操作请见 Spark RDD 操作

本地文件

文本文件 RDDs 可以使用 SparkContext 的 textFile 方法创建。 在这个方法里传入文件的 URI (机器上的本地路径或 hdfs://,s3n:// 等),然后它会将文件读取成一个行集合。

读取文件 test.txt 来创建RDD,文件中的每一行就是RDD中的一个元素。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scala> val b = sc.textFile("test.txt")
b: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[2] at textFile at <console>:21

一旦创建完成,(b) 就能做数据集操作。例如,我们可以用下面的方式使用 map 和 reduce 操作将所有行的长度相加: b.map(s => s.length).reduce((m, n) => m + n)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scala> b.collect
res1: Array[String] = Array(Spark, RDD, Transformations, Actions)

scala> b.map(s => s.length).reduce((m, n) => m + n))
res2: Int = 30

Spark 读文件注意事项

  1. 如果使用本地文件系统路径,文件必须能在 worker 节点上用相同的路径访问到。要么复制文件到所有的 worker 节点,要么使用网络的方式共享文件系统。
  2. 所有 Spark 的基于文件的方法,包括 textFile,能很好地支持文件目录,压缩过的文件和通配符。例如,你可以使用 textFile("/文件目录"),textFile("/文件*.txt") 和 textFile("/文件目录/*.gz")。
  3. textFile 方法也可以选择第二个可选参数来控制切片(slices)的数目。默认情况下,Spark 为每一个文件块(HDFS 默认文件块大小是 64M)创建一个切片(slice)。但是你也可以通过一个更大的值来设置一个更高的切片数目。注意,你不能设置一个小于文件块数目的切片值。

ScalaAPI 对其它数据格式的支持

  1. SparkContext.wholeTextFiles 让你读取一个包含多个小文本文件的文件目录并且返回每一个(filename, content)对。与 textFile 的差异是:它记录的是每个文件中的每一行。
  2. 对于 SequenceFiles,可以使用 SparkContext 的 sequenceFile[K, V] 方法创建,K 和 V 分别对应的是 key 和 values 的类型。像 IntWritableText 一样,它们必须是 HadoopWritable 接口的子类。另外,对于几种通用的 Writables,Spark 允许你指定原生类型来替代。例如: sequenceFile[Int, String] 将会自动读取 IntWritables 和 Text。
  3. 对于其他的 Hadoop InputFormats,你可以使用 SparkContext.hadoopRDD 方法,它可以指定任意的 JobConf,输入格式(InputFormat),key 类型,values 类型。你可以跟设置 Hadoop job 一样的方法设置输入源。你还可以在新的 MapReduce 接口(org.apache.hadoop.mapreduce)基础上使用 SparkContext.newAPIHadoopRDD(译者注:老的接口是 SparkContext.newHadoopRDD)。
  4. RDD.saveAsObjectFile 和 SparkContext.objectFile 支持保存一个RDD,保存格式是一个简单的 Java 对象序列化格式。这是一种效率不高的专有格式,如 Avro,它提供了简单的方法来保存任何一个 RDD。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-11-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spark之【RDD编程】详细讲解(No1)——《编程模型的理解与RDD的创建》
上一篇博客《什么是RDD?带你快速了解Spark中RDD的概念!》为大家带来了RDD的概述之后。本篇博客,博主将继续前进,为大家带来RDD编程系列。 该系列第一篇,为大家带来的是编程模
大数据梦想家
2021/01/27
6390
Spark之【RDD编程】详细讲解(No1)——《编程模型的理解与RDD的创建》
Spark2.x学习笔记:3、 Spark核心概念RDD
程裕强
2018/01/02
1.4K0
Spark2.x学习笔记:3、 Spark核心概念RDD
Spark2.3.0 创建RDD
Spark的核心概念是弹性分布式数据集(RDD),RDD 是一个可容错、并行操作的分布式元素集合。有两种方法可以创建 RDD 对象:
smartsi
2019/08/07
8610
RDD:创建的几种方式(scala和java)[通俗易懂]
每一个spark应用程序都包含一个驱动程序(driver program ),他会运行用户的main函数,并在集群上执行各种并行操作(parallel operations)
全栈程序员站长
2022/06/29
9750
RDD:创建的几种方式(scala和java)[通俗易懂]
4.2 创建RDD
4.2 创建RDD 由于Spark一切都是基于RDD的,如何创建RDD就变得非常重要,除了可以直接从父RDD转换,还支持两种方式来创建RDD: 1)并行化一个程序中已经存在的集合(例如,数组); 2)引用一个外部文件存储系统(HDFS、HBase、Tachyon或是任何一个支持Hadoop输入格式的数据源)中的数据集。 4.2.1 集合(数组)创建RDD 通过并行集合(数组)创建RDD,主要是调用SparkContext的parallelize方法,在Driver(驱动程序)中一个已经存在的集合(数组)上
Albert陈凯
2018/04/08
1K0
大数据技术之_19_Spark学习_02_Spark Core 应用解析+ RDD 概念 + RDD 编程 + 键值对 RDD + 数据读取与保存主要方式 + RDD 编程进阶 + Spark Cor
  我们需要一个效率非常快,且能够支持迭代计算和有效数据共享的模型,Spark 应运而生。RDD 是基于工作集的工作模式,更多的是面向工作流。   但是无论是 MR 还是 RDD 都应该具有类似位置感知、容错和负载均衡等特性。
黑泽君
2019/05/10
2.5K0
大数据技术之_19_Spark学习_02_Spark Core 应用解析+ RDD 概念 + RDD 编程 + 键值对 RDD + 数据读取与保存主要方式 + RDD 编程进阶 + Spark Cor
2021年大数据Spark(十三):Spark Core的RDD创建
官方文档:http://spark.apache.org/docs/latest/rdd-programming-guide.html#resilient-distributed-datasets-rdds
Lansonli
2021/10/09
5350
Spark Core快速入门系列(2) | Spark Core中编程模型的理解与RDD的创建
  在 Spark 中,RDD 被表示为对象,通过对象上的方法调用来对 RDD 进行转换。   经过一系列的transformations定义 RDD 之后,就可以调用 actions 触发 RDD 的计算   action可以是向应用程序返回结果(count, collect等),或者是向存储系统保存数据(saveAsTextFile等)。   在Spark中,只有遇到action,才会执行 RDD 的计算(即延迟计算),这样在运行时可以通过管道的方式传输多个转换。   要使用 Spark,开发者需要编写一个 Driver 程序,它被提交到集群以调度运行 Worker   Driver 中定义了一个或多个 RDD,并调用 RDD 上的 action,Worker 则执行 RDD 分区计算任务。
不温卜火
2020/10/28
6740
Spark Core快速入门系列(2) | Spark Core中编程模型的理解与RDD的创建
Spark2.x学习笔记:7、Spark应用程序设计
本文介绍了Spark编程的一些基础概念和常用操作,包括RDD、DataFrame、DataSet、Transformations、Actions、Spark Streaming、GraphX和Machine Learning。同时,文章还探讨了Spark在不同领域的应用,包括互联网广告、推荐系统、数据挖掘和自然语言处理等。文章还介绍了Spark的生态系统,包括Spark SQL、MLlib、GraphX和Structured Streaming。
程裕强
2018/01/02
1.1K0
Spark2.x学习笔记:7、Spark应用程序设计
Spark之【RDD编程】详细讲解(No3)——《Action行动算子》
本篇博客是Spark之【RDD编程】系列第三篇,为大家带来的是Action的内容。
大数据梦想家
2021/01/27
3420
Spark之【RDD编程】详细讲解(No3)——《Action行动算子》
Spark开发指南
总的来说,每一个Spark的应用,都是由一个驱动程序(driver program)构成,它运行用户的main函数,在一个集群上执行各种各样的并行操作。Spark提出的最主要抽象概念是弹性分布式数据集 (resilient distributed dataset,RDD),它是元素的集合,划分到集群的各个节点上,可以被并行操作。RDDs的创建可以从HDFS(或者任意其他支持Hadoop文件系统) 上的一个文件开始,或者通过转换驱动程序(driver program)中已存在的Scala集合而来。用户也可以让Spark保留一个RDD在内存中,使其能在并行操作中被有效的重复使用。最后,RDD能自动从节点故障中恢复。
幽鸿
2020/04/02
2K0
Apache Spark 2.2.0 中文文档 - Spark 编程指南 | ApacheCN
本文介绍了 Apache Spark 的 RDD 程序设计指南,从 RDD 的基本概念、创建与操作、缓存与存储、性能优化等方面进行了详细阐述,并提供了丰富的实例和代码以帮助读者更好地理解和掌握 RDD 的使用方法。
片刻
2018/01/05
1.7K0
Apache Spark 2.2.0 中文文档 - Spark 编程指南 | ApacheCN
RDD的几种创建方式
在RDD中,通常就代表和包含了Spark应用程序的输入源数据。  当我们,在创建了初始的RDD之后,才可以通过Spark Core提供的transformation算子,对该RDD进行transformation(转换)操作,来获取其他的RDD。  Spark Core为我们提供了三种创建RDD的方式,包括: 
Java架构师必看
2021/05/14
1.4K0
Spark Core入门2【RDD的实质与RDD编程API】
所以RDD不过是对一个函数的封装,当一个函数对数据处理完成后,我们就得到一个RDD的数据集(是一个虚拟的,后续会解释)。
Java架构师必看
2021/05/14
1.1K0
Spark Core入门2【RDD的实质与RDD编程API】
RDD操作—— 行动(Action)操作
行动操作是真正触发计算的地方。Spark程序执行到行动操作时,才会执行真正的计算,从文件中加载数据,完成一次又一次转换操作,最终,完成行动操作得到结果。
羊羽shine
2019/08/20
1.5K0
Spark Core快速入门系列(4) | <Action> 行动算子转换算子
  返回一个由RDD的前n个元素组成的数组   take 的数据也会拉到 driver 端, 应该只对小数据集使用
不温卜火
2020/10/28
5150
Spark的RDDs相关内容
通常使用parallelize()函数可以创建一个简单的RDD,测试用(为了方便观察结果)。
ZONGLYN
2019/08/08
5910
Spark的RDDs相关内容
Spark之【数据读取与保存】详细说明
Spark的数据读取及数据保存可以从两个维度来作区分:文件格式以及文件系统。文件格式分为:Text文件、Json文件、Csv文件、Sequence文件以及Object文件;文件系统分为:本地文件系统、HDFS、HBASE以及数据库。
大数据梦想家
2021/01/27
1.7K0
Spark之【数据读取与保存】详细说明
创建RDD(集合,本地文件,HDFS文件)
进行Spark核心编程时,首先要做的第一件事,就是创建一个初始的RDD。该RDD中,通常就代表和包含了Spark应用程序的输入源数据。然后在创建了初始的RDD之后,才可以通过Spark Core提供的transformation算子,对该RDD进行转换,来获取其他的RDD。
编程那点事
2023/02/25
8690
SparkCore之RDD
https://blog.csdn.net/zym1117/article/details/79532458
用户1483438
2022/04/26
6770
相关推荐
Spark之【RDD编程】详细讲解(No1)——《编程模型的理解与RDD的创建》
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验