RDD介绍

RDD算子的基本介绍 在 Apache Spark 中,RDD(弹性分布式数据集)是核心的数据抽象,RDD 算子可分为转换算子(Transformation)和行动算子(Action)。下面使用 Scala 语言为你详细介绍这两类算子。转换算子(Transformation)转换算子会基于现有的 RDD 创建一个新的 RDD,这些操作是惰性的,即只有在遇到行动算子时才会真正触发计算。常见转换算子示例map(func):对 RDD 中的每个元素应用指定的函数,生成一个新的 RDD。scala。 阅读详情

RDD
让开发者大大降低开发分布式应用程序的门槛,提高执行效率。

RDD源码:https://github.com/apache/spark/tree/master/core/src/main/scala/org/apache/spark/rdd

RDD:弹性的分布式数据集,代表了不可变的,可分区的元素,这些元素能被并行操作。
弹性:指的是spark在分布式计算的时候可以容错
分布式:数据可能跨节点存储在不同的节点之上,计算也可以在不同节点上执行

一个RDD由多个partition构成
RDDA: (1,2,3,4,5,6,7,8,9) 对每个元素 +1 ,rdd会对每个partition操作,同时进行

   hadoop001:  Partition1:(1,2,3)  +1

   hadoop002:  Partition2:(4,5,6) +1

   hadoop003: Partition3:  (7,8,9) +1
  1. RDD是抽象类:RDD必然是由子类实现的,使用时直接使用子类即可
  2. 序列化:序列化性能的好坏直接导致框架性能的优劣
  3. Logging:spark1.6可以直接用,2.0不可以用。自己写一个或者拷原来的来用。
  4. T: 泛型,rdd支持各种数据类型

RDD的三大必有特性

  1. 分区多
  2. 计算是作用在每一个分区上的
  3. 每个RDD之间有依赖关系,第一个RDD加载出来的,其余相互依赖

在spark中,计算时,有多少partition就对应有多少个task来执行

SparkContext
http://spark.apache.org/docs/2.2.0/rdd-programming-guide.html#initializing-spark

spark程序的第一步 SparkConf --> SparkContext

sparkcontext告诉spark如何连接一个集群,运行在哪个模式上面 local standalone yarn mesos

创建SparkConf对象(键值对的方式),支持链式set。 SparkConf包含一些应用程序的信息(Application name, master, memory)
在集群上运行时,不要硬编码一个master。要通过spark-submit的方式提交master

 object SparkContextApp {
  def main(args: Array[String]): Unit = {
    val sparkconf = new SparkConf().setAppName("sparkcontextApp11").setMaster("local[2]")
    val sc =new SparkContext(sparkconf)

   // ToDo... 业务逻辑代码

    sc.stop()
  }
}

spark-shell的使用
spark-shell是交互式命令行,直接输入命令就能得到结果,不需要借助idea了;一般用于测试,开发还是要IDEA+MAVEN

  1. 借助于–help
  2. 重要参数
    –master 不建议硬编码指定master
    –name 指定application的名称
    –jars 以逗号分割,传入多个本地jar包
    –conf 指定配置参数
    –queue 队列
    –num-executor 执行端的个数
spark-shell --master local[2]
spark-shell --master local[4] --jars code.jar
spark-shell --master local[4] --packages "org.example:example:0.1"

RDD的创建方式

  1. 把一个集合转换为RDD 测试的时候用
  2. 使用外部存储系统的数据集(HDFS,HBase…) 生产的时候用

方式1:

scala> val data = Array(1, 2, 3, 4, 5)
data: Array[Int] = Array(1, 2, 3, 4, 5)


//数组转换为RDD
scala> val distData = sc.parallelize(data)
distData: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at <console>:26

scala> distData.collect()
res0: Array[Int] = Array(1, 2, 3, 4, 5)                                         

//数组里面的数两两相加
scala> distData.reduce((a, b) => a + b)
res1: Int = 15

// 一个task对应于一个partition,下面的命令会有5个task
scala> val distData = sc.parallelize(data,5)
distData: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[1] at parallelize at <console>:26

方法2:

外部数据集的方式创建RDD, 支持Hadoop,Hbase, S3 … 支持 文本格式、sequenceFile

textFile:
Read a text file from HDFS, a local file system (available on all nodes), or any
Hadoop-supported file system URI, and return it as an RDD of Strings.

Standalone模式下:
在standalone模式下少用本地的文件模式

inputfile 必须要确保所有节点上都有

//本地
scala> val distFile = sc.textFile("file:///home/hadoop/source/a.dat")
distFile: org.apache.spark.rdd.RDD[String] = file:///home/hadoop/source/a.dat MapPartitionsRDD[3] at textFile at <console>:24

scala> distFile.collect
res0: Array[String] = Array(hello	eurecom	hello, eurecom	hello	yuan)

// hdfs
scala> val distFile = sc.textFile("hdfs://hadoop001:9000/data")
distFile: org.apache.spark.rdd.RDD[String] = hdfs://hadoop001:9000/data MapPartitionsRDD[1] at textFile at <console>:24

scala> distFile.collect
res0: Array[String] = Array(hello       eurecom hello, eurecom  hello   yuan) 

注意点:

  1. 使用本地文件时,文件必须在各个工作节点上都能以相同的路径访问,所有节点上都必须要有这个文件,文件路径还得一样
  2. 指定hdfs时,可以指定到文件,也可以指定到文件夹,也可以用通配符匹配多个文件
  3. textFile的第二个参数可以控制partition的数量

RDD操作
1) 转换操作,RDD是不可变的,必须从RDDA转换为RDDB;
所有的转换操作都是懒(lazy)操作,不遇到action,转换操作就不会被执行

  • map 对RDD中的每个元素进行操作,返回一个新的RDD
scala> var a = sc.parallelize(1 to 9)
a: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at <console>:24

scala> a.map(_*2)
res0: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[1] at map at <console>:27

scala> a.map(_*2).collect()
res1: Array[Int] = Array(2, 4, 6, 8, 10, 12, 14, 16, 18)

scala> var a = sc.parallelize(List("dog","tiger","cat"))
a: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[3] at parallelize at <console>:24

scala> val b =a.map(x=>(x,1))
b: org.apache.spark.rdd.RDD[(String, Int)] = MapPartitionsRDD[4] at map at <console>:26

scala> b.collect()
res2: Array[(String, Int)] = Array((dog,1), (tiger,1), (cat,1))
  • filter 对元素进行过滤
scala> a.filter(_%2 == 0).collect()
res3: Array[Int] = Array(2, 4, 6, 8, 10)

scala> a.filter(_<4).collect()
res4: Array[Int] = Array(1, 2, 3)

scala> var a = sc.parallelize(1 to 6)
a: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[8] at parallelize at <console>:24

scala> val mapRDD = a.map(_*2)
mapRDD: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[9] at map at <console>:26

scala> mapRDD.collect()
res5: Array[Int] = Array(2, 4, 6, 8, 10, 12)

scala> mapRDD.filter(_>5).collect
res7: Array[Int] = Array(6, 8, 10, 12)
  • flatMap和Map的区别
    flatMap是压平后操作的,词频统计里面就用flatMap
scala> var a = sc.parallelize(1 to 9)
a: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at <console>:24

scala> var nums = a.map(x=>(x*x))
nums: org.apache.spark.rdd.RDD[Int] = MapPartitionsRDD[1] at map at <console>:26

scala> nums.collect
res0: Array[Int] = Array(1, 4, 9, 16, 25, 36, 49, 64, 81)

//把每个x都拓展成1到x
scala> nums.flatMap(x => 1 to x).collect
res1: Array[Int] = Array(1, 1, 2, 3, 4, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 1, 2, 3, 4, 5, ...
  • mapValues 只对value进行操作,key不动
scala> val a = sc.parallelize(List("dog","tiger","cat"))
a: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[14] at parallelize at <console>:24

scala> val b = a.map(x=>(x,x.length))
b: org.apache.spark.rdd.RDD[(String, Int)] = MapPartitionsRDD[15] at map at <console>:26

scala> b.collect()
res9: Array[(String, Int)] = Array((dog,3), (tiger,5), (cat,3))

scala> b.mapValues("x"+_+"x").collect()
res10: Array[(String, String)] = Array((dog,x3x), (tiger,x5x), (cat,x3x))
  • count 返回数据集里元素的个数
  • sum 求和操作
scala> var a = sc.parallelize(1 to 100)
a: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[17] at parallelize at <console>:24

scala> a.sum()
res11: Double = 5050.0

scala> a.reduce(_+_)
res12: Int = 5050
  • first 返回数据集第一个元素 和take(1)类似
scala> val a = sc.parallelize(List("dog","tiger","cat"))
a: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[19] at parallelize at <console>:24

scala> a.first()
res13: String = dog

scala> a.take(1)
res14: Array[String] = Array(dog)
  • top 排序
scala> sc.parallelize(Array(6,9,4,7,5,8)).top(2)
res15: Array[Int] = Array(9, 8)

//隐式转换后从小到大排序
scala> implicit val myorder = implicitly[Ordering[Int]].reverse
myorder: scala.math.Ordering[Int] = scala.math.Ordering$$anon$4@44473eed

scala> sc.parallelize(Array(6,9,4,7,5,8)).top(2)
res16: Array[Int] = Array(4, 5)
  • subtract
    不是相减,是去重复元素
scala> val a = sc.parallelize(1 to 5)
a: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[6] at parallelize at <console>:24

scala> a.collect
res3: Array[Int] = Array(1, 2, 3, 4, 5)

scala> val b = sc.parallelize(2 to 3)
b: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[7] at parallelize at <console>:24

scala> b.collect
res4: Array[Int] = Array(2, 3)

scala> a.subtract(b).collect
res5: Array[Int] = Array(4, 1, 5)
  • intersection
    返回交叉的部分
scala> val a = sc.parallelize(1 to 5)
a: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[6] at parallelize at <console>:24

scala> a.collect
res3: Array[Int] = Array(1, 2, 3, 4, 5)

scala> val b = sc.parallelize(2 to 3)
b: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[7] at parallelize at <console>:24

scala> b.collect
res4: Array[Int] = Array(2, 3)

scala> a.intersection(b).collect
res6: Array[Int] = Array(2, 3)
  • cartesian
    返回笛卡尔积
scala> val a = sc.parallelize(1 to 5)
a: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[6] at parallelize at <console>:24

scala> a.collect
res3: Array[Int] = Array(1, 2, 3, 4, 5)

scala> val b = sc.parallelize(2 to 3)
b: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[7] at parallelize at <console>:24

scala> b.collect
res4: Array[Int] = Array(2, 3)

scala> a.cartesian(b).collect
res7: Array[(Int, Int)] = Array((1,2), (2,2), (1,3), (2,3), (3,2), (4,2), (5,2), (3,3), (4,3), (5,3))

2)actions, which return a value to the driver program after running a computation on the dataset. 对结果进行处理
reduce 聚合所有的结果

Join在Spark CORE中的使用

scala> val a=sc.parallelize(Array(("A","a1"),("B","b1"),("C","c1"),("D","d1"),("D","d2")))
a: org.apache.spark.rdd.RDD[(String, String)] = ParallelCollectionRDD[6] at parallelize at <console>:24

scala> val b=sc.parallelize(Array(("A","a2"),("B","b2"),("C","c1"),("D","d2"),("D","d3"),("E","E1")))
b: org.apache.spark.rdd.RDD[(String, String)] = ParallelCollectionRDD[7] at parallelize at <console>:24

//join,只返回左右都匹配上的
scala> a.join(b).collect
res10: Array[(String, (String, String))] = Array((B,(b1,b2)), (D,(d1,d2)), (D,(d1,d3)), (D,(d2,d2)), (D,(d2,d3)), (A,(a1,a2)), (C,(c1,c1)))

//leftOuterJoin , rightOuterJoin,fullOuterJoin跟sql原理是一样的
scala> a.leftOuterJoin(b).collect
res2: Array[(String, (String, Option[String]))] = Array((B,(b1,Some(b2))), (D,(d1,Some(d2))), (D,(d1,Some(d3))), (D,(d2,Some(d2))), (D,(d2,Some(d3))), (A,(a1,Some(a2))), (C,(c1,Some(c1))))

词频统计实战

scala> val log = sc.textFile("/home/hadoop/source/a.dat")
log: org.apache.spark.rdd.RDD[String] = /home/hadoop/source/a.dat MapPartitionsRDD[1] at textFile at <console>:24

scala> val splits = log.flatMap(x => x.split("\t"))
splits: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[2] at flatMap at <console>:26

scala> val wordone  = splits.map(x=>(x,1)) 
wordone: org.apache.spark.rdd.RDD[(String, Int)] = MapPartitionsRDD[3] at map at <console>:28

scala> wordone.collect
res0: Array[(String, Int)] = Array((hello,1), (eurecom,1), (hello,1), (eurecom,1), (hello,1), (yuan,1))

scala> val res1 = wordone.reduceByKey(_+_) 
res1: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[5] at reduceByKey at <console>:30

scala> res1.collect
res2: Array[(String, Int)] = Array((hello,3), (eurecom,2), (yuan,1))

什么是Spark RDD?(RDD的介绍与创建) 什么是Spark RDD?RDD的介绍与创建 阅读详情

相关推荐

RDD算子介绍

一、RDD算子简介 提供一优秀RDD讲解链接:https://blog.youkuaiyun.com/fortuna_i/article/details/81170565 spark在运行过程中通过算子对RDD进行计算,算子是RDD中定义的函数,可以对RDD中数据进行转换和操作,如下图 输入:spark程序中数据从外部数据空间输入到spark中的数据块,通过BlockManager进行管理 运行:...

fengfengchen95的博客 3801

详解RDD基本概念、RDD五大属性

RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD是spark core的底层核心。Dataset:RDD 可以不保存具体数据, 只保留创建自己的必备信息, 例如依赖和计算函数;RDD 也可以缓存起来, 相当于存储具体数据。Distributed: RDD 支持分区, 可以运行在集群中。Resilient:RDD 支持高效的容错;RDD 中的数据即可以缓存在内存中

大数据 1万+

普源精电DHO系列示波器选购指南:从学生党到工程师的完整对比

本文深入评测普源精电DHO系列示波器,从DHO800到DHO4000各型号的核心参数、功能特点及适用场景进行全面对比,帮助学生党和工程师根据实际需求选择最佳型号。重点分析带宽、采样率、存储深度等关键指标,并提供实用的选购建议和进阶使用技巧,帮助用户充分发挥示波器性能。

weixin_30485379的博客 166

RDD(弹性分布式数据集)总结

spark提出的数据抽象模式RDD弹性分布式数据集

qq_40229166的博客 1629

若依框架集成saToken

若依版本3.8.8,鉴权采用security框架,这种框架太重,项目中想实现对外提供接口功能。尽快减少修改原框架的逻辑基础上,采用satoken实现。

sccd2009的专栏 1482

Cursor插件安装CodeX保姆级教程:从登录到调整面板布局,一步不落

本文提供Cursor编辑器安装CodeX插件的详细教程,涵盖从登录到调整面板布局的全流程。通过优化界面布局和配置参数,帮助开发者提升编码效率,特别适合需要智能代码补全的编程场景。

weixin_42648844的博客 4739

[PySpark学习]RDD的转换(Transformation)与动作算子(Action)

RDD(英文全称Resilient Distributed Dataset),即弹性分布式数据集是spark中引入的一个数据结构,是Spark中最基本的数据抽象,代表一个不可变、可分区、里面的元素可并行计算的集合。Resilient弹性:RDD的数据可以存储在内存或者磁盘当中,RDD的数据可以分区。Distributed分布式:RDD的数据可以分布式存储,可以进行并行计算。Dataset数据集:一个用于存放数据的集合。

alie_123的博客 1810

中兴U30air随身WiFi刷机全攻略:从ABD开启到系统调试(附工具包)

本文提供中兴U30air随身WiFi刷机全攻略,从ADB开启到系统调试的详细步骤,包括必备工具清单、ADB调试模式解锁、Bootloader解锁及自定义ROM刷入与调优。适合技术爱好者深度定制设备,提升网络性能和功能扩展。

weixin_29235923的博客 1924

LangChain Core 架构深度剖析与 LCEL 高阶实战

本文深度剖析了LangChain Core架构与LCEL高阶实战应用。首先解析了langchain_core的核心概念,包括Runnable协议、标准化消息类型和三大基石组件(Prompts、Language Models、Output Parsers)。接着介绍了LCEL的核心关联知识,如Python的魔术方法__or__和有向无环图(DAG)概念。文章提供了多个实用技巧和Demo示例,包括基础LCEL链构建、RunnablePassthrough数据透传等,并分享了常见错误与调试方法。最后通过实战案例,

feizuiku0116的博客 6889

搞定ESD(五):静电放电问题分析与调试

前面深入分析了静电放电的干扰机理、耦合路径,从现在开始将进入下一个大家非常关注的环节:静电放电问题分析与调试,掌握静电放电问题的分析方法,快速锁定敏感设备或者耦合路径,可以达到事半功倍的效果。

记得诚 2793

Vue3 + 高德地图实现车辆电子围栏监控与报警

通过本文的实现,我们完成了一个通用的车辆电子围栏监控功能:支持多种围栏类型。支持进入/离开/双向报警。使用缓存机制避免重复告警。可与Vue3 + 高德地图无缝集成。在实际项目中,可以结合WebSocket 实时定位,实现车辆的实时监控 + 围栏告警系统🚀。

专注于前端开发与实战技巧,记录从零到一的学习与项目经验。分享 Vue3 / JavaScript / TypeScript / Flutter /Uniapp等前端技术,以及 性能优化、工程化、最佳实践。 1033

Spark 中 RDD 的详细介绍

RDD ---弹性分布式数据集 RDD概述 RDD论文 中文版 : http://spark.apachecn.org/paper/zh/spark-rdd.html RDD产生背景 为了解决开发人员能在大规模的集群中以一种容错的方式进行内存计算,提出了 RDD 的概念,而当前的很多框架对迭代式算法场景与交互性数据挖掘场景的处理性能非常差, 这个是RDDs 的提出的动机。 什么是 RD...

彷徨的博客 2万+

ContextCapture系列教程(三):大疆精灵4RTK版无人机POS数据提取、处理(处理后勉强达到免相控要求)

大疆精灵 Phantom 4 RTK于2018年发布,是大疆为高精度建图与精准飞行设计的行业级无人机,在精灵4无人机外形的基础上,机身增加了RTK模块,可以实现高精度 RTK 定位导航,相机与 RTK 系统采用微秒级时间同步,可以通过app 进行航线规划飞行

pausau的博客 1万+

RDD的介绍、RDD的特点、创建RDD数据

RDD的介绍、RDD的特点、创建RDD数据

m0_70882914的博客 1741

RK3588部署YOLO模型 包含模型量化+npu轻量化+ubuntu+RGA图像加速和多线程模型加速 包源码

本专栏为深度学习部署全栈学习体系,包含68篇由浅入深的教程,专为零基础学习者设计。内容涵盖TensorRT与RK3588平台部署技术,包含Jetson系列和RK系列硬件部署实战,采用"理论+源码+实战"三位一体的教学模式。学习路径从基础环境搭建到模型优化、容器化部署、多硬件平台适配,最终掌握工业级AI部署能力。特色包括C++基础教学、Docker容器化、INT8量化、多线程优化等核心技术,并附带YOLOv5、人脸检测、车牌识别等多个实战项目源码。适合算法工程师转部署方向、嵌入式开发者及对

FJN110的博客 3729

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

spark_rdd算子介绍

RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。

HYSliuliuliu的博客 8019

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Spark之RDD,RDD的介绍,RDD的特点,RDD的创建,RDD的分区,RDD的小文件读取

Spark之RDD,RDD的介绍,RDD的特点,RDD的创建,RDD的分区,RDD的小文件读取

qq_55006020的博客 669

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

spark RDD介绍

一、RDD介绍 RDD(Resilient Distrobuted Dataset)是spark最基本的数据结构,是分布再集群各个不同节点的不可变的数据集合。 RDD 是spark处理过程中数据的逻辑表示 RDD在spark应用的不同阶段的数据结构表示 Resilient 弹性的,可以通过RDD Lineage图(DAG)进行重新计算,具有很好的容错性 DAG在spark 程序中如何工作: (1)编译器编译好程序代码 (2)Spark创建由各个RDD组成的操作算子图,形成DAG (3)当有Action算

weixin_39767869的博客 3161

Spark的RDD介绍

1、RDD为什么会产生 RDD是Spark的基石,是实现Spark数据处理的核心抽象。 Hadoop的MapReduce是一种基于数据集的工作模式,面向数据,这种工作模式一般是从存储上加载数据集,然后操作数据集,最后写入物理存储设备。数据更多面临的是一次性处理。 MR的这种方式对数据领域两种常见的操作不是很高效。第一种是迭代式的算法。比如机器学习中ALS、...

qq_41544550的博客 1175

RDD的基本介绍

RDD 是一种分布式数据集,它将数据分布在集群的多个节点上,允许开发者以一种分布式的方式对数据进行并行操作。RDD 的设计灵感来源于分布式内存抽象的概念,旨在提供一种高效、容错且可扩展的数据处理方式。分布式:数据被分割成多个分区(Partition),每个分区存储在集群的不同节点上。弹性:RDD 具有容错性,即使部分节点发生故障,数据也可以通过重新计算恢复。不可变:RDD 是不可变的,一旦创建,其内容不能被修改。如果需要修改数据,必须通过转换操作生成一个新的 RDD。

2401_87076397的博客 904

RDD介绍及操作

xianrenqiu1234的博客 330

SPark 中RDD的介绍

目录 背景描述 RDD介绍 1.基本概念 2.spark接口 3.RDDs接口5个特性 4.RDDs依赖关系 5.作业调度 6.内存管理 7.检查点支持(checkpoint)  最后总结   背景描述        在hadoop中一个独立的计算,例如在一个迭代过程中,除可复制的文件系统(HDFS)外没有提供其他存储的概念,这就导致在网络上进行数据复制而增加了大量的消耗...

newchitu的博客 463

RDD基本介绍

通过 SparkConf 类,你可以设置应用程序的名称、运行模式(如本地模式、集群模式)、资源分配(如内存、CPU 核心数)等。Resilient Distributed Dataset 叫做弹性分布式数据集,是Spark中最基本的数据抽象,是分布式计算的实现载体,代表一个不可变,可分区,里面的元素并行计算的集合。- Distributed: 分布式存储的,表示数据是存放在不同的机器上的。不可变的:immutable。并行计算:集合中的数据可以被并行的计算处理,每个分区数据被一个Task任务处理。

2302_82088352的博客 1033

spark RDD基本介绍

基于RDDs 之间的依赖,RDDs 会形成一个有向无环图DAG,该DAG 描述了整个流式计算的流程,实际执行的时候,RDD 是通过血缘关系(Lineage)一气呵成的,即使出现数据分区丢失,也可以通过血缘关系重建分区,总结起来,基于RDD 的流式计算任务可描述为:从稳定的物理存储(如分布式文件系统)中加载记录,记录被传入由一组确定性操作构成的DAG,然后写回稳定存储。RDD 逻辑上是分区的,每个分区的数据是抽象存在的,计算的时候会通过一个compute函数得到每个分区的数据。

2401_87250241的博客 538
上一篇: Spark源码安装与部署
下一篇: IDEA+MAVEN开发Spark 词频统计
shell33168
博客等级 码龄9年 33粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值