Spark学习笔记二_RDD数据结构及其操作

作者: BitGuo | 来源:发表于2019-10-28 16:30 被阅读0次

参考Spark官方文档:http://spark.apache.org/docs/latest/rdd-programming-guide.html

Spark shell以及SparkContext

以下代码可在Spark shell中运行,在Spark shell中默认已经为用户创建了一个特殊的SparkContext,叫sc。

RDD数据结构

RDD全称是resilient distributed dataset,弹性分布式数据集合,这个是一个可以容错并且能够被多个节点同时操作的数据集合。

创建RDD的两种途径

  • 在driver程序中同步一个已经存在的集合
val data = Array(1, 2, 3, 4, 5)
val distData = sc.parallelize(data)

通过调用shell为我们创建的SparkContext的实例sc的parallelize方法。

  • 从外部以文件的形式导入数据
scala> val distFile = sc.textFile("data.txt")
distFile: org.apache.spark.rdd.RDD[String] = data.txt MapPartitionsRDD[10] at textFile at <console>:26

通过调用textFile方法,该方法传入一个文件的URI作为参数,URI可以是本地的路径也可以是其他机器上的比如 hdfs:// 等。该方法将读取到文件视为一行行数据的集合。

在RDD上的操作

RDD支持两种类型的操作:transformations & actions

transformations :该类操作将从一个已经存在的RDD上创建一个新的RDD,可以将map理解为是transformations 类操作,因为map通过将一个dataset中的元素逐个传入某个map函数之后,返回一个新的RDD来表示经过函数处理过的结果。

actions:该类操作干的事情就是在对dataset执行一些计算活动之后,向driver程序返回计算的结果。reduce就是属于actions的操作,reduce通过函数归并 RDD中的元素并将最终结果返回给driver程序。

Sparktransformations 操作被定义为懒操作,因为transformations 并不会立即去计算结果。只有当一个actions操作需要向driver返回结果的时候,transformations 才会被计算。
举个🌰说明一下:
如下一段scala代码:

val lines = sc.textFile("data.txt")
val lineLengths = lines.map(s => s.length)
val totalLength = lineLengths.reduce((a, b) => a + b)

这是从外部文件获取数据创建RDD并对其进行计算,整个三句话干的事情就是读取data.txt文件,并对文件中每一行的长度进行计算最后累加求得总长度。
第二行的map是一个transformations操作,它实际上并不会立刻计算出每一行的值并放入lineLength中,即lineLength目前没有值,到第三行的时候遇到了reduce,是一个actions方法,这时候Spark会将计算分解为多个tasks,分别在独立的机器上运行,每台机器运行格子的map 和本地的reduce,最终将结果返回driver程序。
如果在后面还要继续用到lineLengths的值,可以

lineLengths.persist()

将这个变量的值进行缓存。

相关文章

  • Spark学习笔记二_RDD数据结构及其操作

    参考Spark官方文档:http://spark.apache.org/docs/latest/rdd-progr...

  • Spark Architecture

    OReilly.Learning.Spark 学习笔记 Spark里所有操作都是对RDD来的。分为两种 1. Tr...

  • spark任务执行过程

    ​ 在学习了Spark RDD和RDD操作之后,是不是很想快点写个Spark程序来巩固一下所学的知识。学习大数...

  • Spark RDD Api使用指南

    ​ 在Spark快速入门-RDD文章中学了spark的RDD。spark包含转换和行动操作。在进行spark程...

  • Spark RDD Map Reduce 基本操作

    RDD是什么? RDD是Spark中的抽象数据结构类型,任何数据在Spark中都被表示为RDD。从编程的角度来看,...

  • 3.Spark学习(Python版本):Spark RDD编程基

    Spark中针对RDD的操作包括创建RDD、RDD转换操作和RDD行动操作。 Step1. 启动HDFS和Spar...

  • spark基本工作原理

    1.spark基本工作原理 2.RDD 以及其特性a、RDD是Spark提供的核心抽象,全称为Resillient...

  • RDD详解

    RDD基本操作(引用) 1、RDD是什么 RDD:Spark的核心概念是RDD (resilientdistrib...

  • Spark API - RDD

    转摘地址: Spark笔记:RDD基本操作(上) RDD本质就是一个数组,因此构造数据时候使用的是List(链表)...

  • Spark RDD

    RDD及其特点 RDD是Spark的核心数据抽象,全称是Resillient Distributed Datase...

网友评论

    本文标题:Spark学习笔记二_RDD数据结构及其操作

    本文链接:https://www.haomeiwen.com/subject/ygsbvctx.html