spark中的RDD是什么
What is RDD in spark
定义说:
RDD is immutable distributed collection of objects
不太明白什么意思。它是否像存储在硬盘上的数据(分区对象)如果是这样那么RDD怎么会有用户定义的类(例如java,scala或python)
来自这个link:https://www.safaribooksonline.com/library/view/learning-spark/9781449359034/ch03.html它提到:
Users create RDDs in two ways: by loading an external dataset, or by
distributing a collection of objects (e.g., a list or set) in their
driver program
我对 RDD 的一般理解以及与 spark 和 hadoop 的关系真的很困惑。
有人可以帮忙吗
RDD 是 dataset
的逻辑引用,它在集群中的许多服务器计算机上进行分区。 RDDs 是不可变的,在发生故障时会自行恢复。
dataset
可以是用户外部加载的数据。它可以是 json 文件、csv 文件或没有特定数据结构的文本文件。
UPDATE:Here 是描述 RDD 内部结构的论文:
希望这对您有所帮助。
从本质上讲,RDD 是一组数据的 Spark 表示,分布在多台机器上,具有可让您对其进行操作的 API。 RDD 可以来自任何数据源,例如文本文件,通过 JDBC 的数据库,等等
正式定义是:
RDDs are fault-tolerant, parallel data structures that let users
explicitly persist intermediate results in memory, control their
partitioning to optimize data placement, and manipulate them using a
rich set of operators.
如果您想了解什么是 RDD 的完整详细信息,请阅读 Spark 核心学术论文之一,Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing
比较 RDD 与 scala 集合,以下是一些差异
- 相同,但在集群上运行
- 本质上是懒惰的,scala 集合是严格的
- RDD 始终是不可变的,即您无法更改集合中数据的状态
- RDD 是自恢复的,即容错的
Resilient Distributed Dataset (RDD) 是 Spark 表示数据的方式。数据可以来自各种来源:
- 文本文件
- CSV 文件
- JSON 文件
- 数据库(通过 JBDC 驱动程序)
RDD 与 Spark 的关系
Spark 只是 RDD 的一个实现。
RDD 与 Hadoop 的关系
Hadoop 的强大之处在于它允许用户编写并行计算而不必担心工作分配和容错。但是,对于重用中间结果的应用程序,Hadoop 效率低下。例如,PageRank、K-means 聚类和逻辑回归等迭代机器学习算法会重复使用中间结果。
RDD 允许将中间结果存储在 RAM 中。 Hadoop 必须将其写入外部稳定存储系统,从而生成磁盘 I/O 和序列化。使用 RDD,Spark 在迭代应用程序方面比 Hadoop 快 20 倍。
关于 Spark 的更多实现细节
粗粒度转换
应用于 RDD 的转换是粗粒度的。这意味着对 RDD 的操作应用于整个数据集,而不是其单个元素。因此,允许进行 map、filter、group、reduce 等操作,但不允许进行 set(i) 和 get(i) 等操作。
粗粒度的逆是细粒度。一个细粒度的存储系统将是一个数据库。
容错
RDD 是容错的,这是一种 属性,它使系统在其组件之一发生故障时能够继续正常工作。
Spark 的容错能力与其粗粒度特性密切相关。在细粒度存储系统中实现容错的唯一方法是跨机器复制其数据或日志更新。但是,在像 Spark 这样的粗粒度系统中,只会记录转换。如果 RDD 的分区丢失,RDD 有足够的信息可以快速重新计算它。
数据存储
RDD 在分区中 "distributed"(分隔)。每个分区都可以存在于内存中或机器的磁盘上。当 Spark 想要在分区上启动任务时,他会将任务发送到包含该分区的机器。这被称为 "locally aware scheduling".
来源:
关于 Spark 的优秀研究论文:
http://spark.apache.org/research.html
包括 Ewan Leith 建议的论文。
RDD = 弹性分布式数据集
弹性(字典含义)=(物质或物体的)在弯曲、拉伸或压缩后能够反冲或 spring 恢复原状
RDD 被定义为(来自 LearningSpark - OREILLY):始终重新计算 RDD 的能力实际上是 RDD 被称为“弹性”的原因。当保存 RDD 数据的机器出现故障时,Spark 使用此功能重新计算丢失的分区,对用户透明。
这意味着 'data' 肯定随时可用。此外,Spark 可以 运行 没有 Hadoop,因此不会复制数据。在 Passive Standby Namenode 的帮助下,Hadoop2.0 的最佳特性之一是 'High Availbility'。 Spark中的RDD也实现了同样的效果。
给定的 RDD(数据)可以跨越 Spark 集群中的各个节点(就像在基于 Hadoop 的集群中一样)。
如果任何节点崩溃,Spark可以重新计算RDD并将数据加载到其他节点中,并且数据始终可用。
Spark 围绕 弹性分布式数据集 (RDD) 的概念展开,RDD 是一个容错的元素集合,可以并行操作 (http://spark.apache.org/docs/latest/programming-guide.html#resilient-distributed-datasets-rdds)
形式上,RDD 是只读的分区记录集合。 RDD 只能通过对 (1) 稳定存储中的数据或 (2) 其他 RDD 的确定性操作来创建。
RDD 具有以下属性 –
不变性和分区:
RDD 由分区的记录集合组成。分区是RDD中并行的基本单位,每个分区是数据的一个逻辑分区,它是不可变的,是通过对现有的一些转换创建的partitions.Immutability有助于实现计算的一致性。
如果需要,用户可以根据要加入多个数据集的键定义自己的分区标准。
粗粒度操作:
粗粒度操作是应用于数据集中所有元素的操作。例如 – 将对 RDD 分区中的所有元素执行的映射、过滤器或 groupBy 操作。
容错:
由于 RDD 是在一组转换上创建的,因此它记录这些转换,而不是这些转换的实际 data.Graph 以生成一个 RDD,称为沿袭图。
例如-
firstRDD=sc.textFile("hdfs://...")
secondRDD=firstRDD.filter(someFunction);
thirdRDD = secondRDD.map(someFunction);
result = thirdRDD.count()
万一我们丢失了 RDD 的一些分区,我们可以在沿袭中重放该分区的转换以实现相同的计算,而不是跨多个进行数据复制 nodes.This RDD 的最大好处是,因为它节省了大量的数据管理和复制工作,从而实现更快的计算。
惰性评价:
Spark 会在 RDD 第一次用于操作时延迟计算它们,以便它可以进行管道转换。因此,在上面的示例中,RDD 将仅在调用 count() 操作时被评估。
坚持:
用户可以指明他们将重用哪些 RDD 并为它们选择存储策略(例如,内存存储或磁盘存储等)
RDD 的这些特性使其可用于快速计算。
RDD (R弹性D分布式Datasets)是表示数据的抽象。形式上,它们是一个只读的、分区的记录集合,提供了方便的 API.
RDD 通过解决一些关键问题,为在 MapReduce 等集群计算框架上处理大型数据集提供了一种高性能解决方案:
- 数据保存在内存中以减少磁盘I/O;这与迭代计算特别相关——不必将中间数据保存到磁盘
- 容错(弹性)不是通过复制数据获得的,而是通过跟踪应用于初始数据集(血统)的所有转换获得的。这样,万一发生故障,丢失的数据总是可以从其沿袭中重新计算,避免数据复制再次减少存储开销
- 惰性计算,即在需要时先进行计算
RDD 有两个主要限制:
- 它们是不可变的(只读)
- 它们只允许粗粒度转换(即适用于整个数据集的操作)
RDD 的一个很好的概念优势是它们将数据和代码打包在一起,从而更容易重用数据管道。
来源:Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing, An Architecture for Fast and General Data Processing on Large Clusters
RDD 是一种在 spark.The 中表示数据的方式,数据源可以是 JSON、CSV 文本文件或其他一些来源。
RDD 是容错的,这意味着它将数据存储在多个位置(即数据以分布式形式存储),因此如果一个节点发生故障,数据可以恢复。
在 RDD 中,数据始终可用。
然而,RDD 速度慢且难以编码,因此已经过时。
它已被 DataFrame 和 Dataset 的概念所取代。
RDD
是一个弹性分布式数据集。
它是spark的核心部分。
这是火花的低级别API。
DataFrame 和 DataSets 建立在 RDD 之上。
RDD 只不过是行级数据,即位于 n 个执行程序上。
RDD 是不可变的。意味着您无法更改 RDD。但是你可以使用 Transformation 和 Actions 创建新的 RDD
弹性分布式数据集 (RDD)
弹性:如果在spark中的节点上执行操作时丢失,数据集可以从历史中重建。
分布式:RDD中的数据被分成一个或多个分区,并作为对象的内存集合分布在集群中的工作节点上。
数据集:RDD是由记录组成的数据集,记录是数据集中唯一可识别的数据集合。
定义说:
RDD is immutable distributed collection of objects
不太明白什么意思。它是否像存储在硬盘上的数据(分区对象)如果是这样那么RDD怎么会有用户定义的类(例如java,scala或python)
来自这个link:https://www.safaribooksonline.com/library/view/learning-spark/9781449359034/ch03.html它提到:
Users create RDDs in two ways: by loading an external dataset, or by distributing a collection of objects (e.g., a list or set) in their driver program
我对 RDD 的一般理解以及与 spark 和 hadoop 的关系真的很困惑。
有人可以帮忙吗
RDD 是 dataset
的逻辑引用,它在集群中的许多服务器计算机上进行分区。 RDDs 是不可变的,在发生故障时会自行恢复。
dataset
可以是用户外部加载的数据。它可以是 json 文件、csv 文件或没有特定数据结构的文本文件。
UPDATE:Here 是描述 RDD 内部结构的论文:
希望这对您有所帮助。
从本质上讲,RDD 是一组数据的 Spark 表示,分布在多台机器上,具有可让您对其进行操作的 API。 RDD 可以来自任何数据源,例如文本文件,通过 JDBC 的数据库,等等
正式定义是:
RDDs are fault-tolerant, parallel data structures that let users explicitly persist intermediate results in memory, control their partitioning to optimize data placement, and manipulate them using a rich set of operators.
如果您想了解什么是 RDD 的完整详细信息,请阅读 Spark 核心学术论文之一,Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing
比较 RDD 与 scala 集合,以下是一些差异
- 相同,但在集群上运行
- 本质上是懒惰的,scala 集合是严格的
- RDD 始终是不可变的,即您无法更改集合中数据的状态
- RDD 是自恢复的,即容错的
Resilient Distributed Dataset (RDD) 是 Spark 表示数据的方式。数据可以来自各种来源:
- 文本文件
- CSV 文件
- JSON 文件
- 数据库(通过 JBDC 驱动程序)
RDD 与 Spark 的关系
Spark 只是 RDD 的一个实现。
RDD 与 Hadoop 的关系
Hadoop 的强大之处在于它允许用户编写并行计算而不必担心工作分配和容错。但是,对于重用中间结果的应用程序,Hadoop 效率低下。例如,PageRank、K-means 聚类和逻辑回归等迭代机器学习算法会重复使用中间结果。
RDD 允许将中间结果存储在 RAM 中。 Hadoop 必须将其写入外部稳定存储系统,从而生成磁盘 I/O 和序列化。使用 RDD,Spark 在迭代应用程序方面比 Hadoop 快 20 倍。
关于 Spark 的更多实现细节
粗粒度转换
应用于 RDD 的转换是粗粒度的。这意味着对 RDD 的操作应用于整个数据集,而不是其单个元素。因此,允许进行 map、filter、group、reduce 等操作,但不允许进行 set(i) 和 get(i) 等操作。
粗粒度的逆是细粒度。一个细粒度的存储系统将是一个数据库。
容错
RDD 是容错的,这是一种 属性,它使系统在其组件之一发生故障时能够继续正常工作。
Spark 的容错能力与其粗粒度特性密切相关。在细粒度存储系统中实现容错的唯一方法是跨机器复制其数据或日志更新。但是,在像 Spark 这样的粗粒度系统中,只会记录转换。如果 RDD 的分区丢失,RDD 有足够的信息可以快速重新计算它。
数据存储
RDD 在分区中 "distributed"(分隔)。每个分区都可以存在于内存中或机器的磁盘上。当 Spark 想要在分区上启动任务时,他会将任务发送到包含该分区的机器。这被称为 "locally aware scheduling".
来源: 关于 Spark 的优秀研究论文: http://spark.apache.org/research.html
包括 Ewan Leith 建议的论文。
RDD = 弹性分布式数据集
弹性(字典含义)=(物质或物体的)在弯曲、拉伸或压缩后能够反冲或 spring 恢复原状
RDD 被定义为(来自 LearningSpark - OREILLY):始终重新计算 RDD 的能力实际上是 RDD 被称为“弹性”的原因。当保存 RDD 数据的机器出现故障时,Spark 使用此功能重新计算丢失的分区,对用户透明。
这意味着 'data' 肯定随时可用。此外,Spark 可以 运行 没有 Hadoop,因此不会复制数据。在 Passive Standby Namenode 的帮助下,Hadoop2.0 的最佳特性之一是 'High Availbility'。 Spark中的RDD也实现了同样的效果。
给定的 RDD(数据)可以跨越 Spark 集群中的各个节点(就像在基于 Hadoop 的集群中一样)。
如果任何节点崩溃,Spark可以重新计算RDD并将数据加载到其他节点中,并且数据始终可用。 Spark 围绕 弹性分布式数据集 (RDD) 的概念展开,RDD 是一个容错的元素集合,可以并行操作 (http://spark.apache.org/docs/latest/programming-guide.html#resilient-distributed-datasets-rdds)
形式上,RDD 是只读的分区记录集合。 RDD 只能通过对 (1) 稳定存储中的数据或 (2) 其他 RDD 的确定性操作来创建。
RDD 具有以下属性 –
不变性和分区: RDD 由分区的记录集合组成。分区是RDD中并行的基本单位,每个分区是数据的一个逻辑分区,它是不可变的,是通过对现有的一些转换创建的partitions.Immutability有助于实现计算的一致性。
如果需要,用户可以根据要加入多个数据集的键定义自己的分区标准。
粗粒度操作: 粗粒度操作是应用于数据集中所有元素的操作。例如 – 将对 RDD 分区中的所有元素执行的映射、过滤器或 groupBy 操作。
容错: 由于 RDD 是在一组转换上创建的,因此它记录这些转换,而不是这些转换的实际 data.Graph 以生成一个 RDD,称为沿袭图。
例如-
firstRDD=sc.textFile("hdfs://...")
secondRDD=firstRDD.filter(someFunction);
thirdRDD = secondRDD.map(someFunction);
result = thirdRDD.count()
万一我们丢失了 RDD 的一些分区,我们可以在沿袭中重放该分区的转换以实现相同的计算,而不是跨多个进行数据复制 nodes.This RDD 的最大好处是,因为它节省了大量的数据管理和复制工作,从而实现更快的计算。
惰性评价: Spark 会在 RDD 第一次用于操作时延迟计算它们,以便它可以进行管道转换。因此,在上面的示例中,RDD 将仅在调用 count() 操作时被评估。
坚持: 用户可以指明他们将重用哪些 RDD 并为它们选择存储策略(例如,内存存储或磁盘存储等)
RDD 的这些特性使其可用于快速计算。
RDD (R弹性D分布式Datasets)是表示数据的抽象。形式上,它们是一个只读的、分区的记录集合,提供了方便的 API.
RDD 通过解决一些关键问题,为在 MapReduce 等集群计算框架上处理大型数据集提供了一种高性能解决方案:
- 数据保存在内存中以减少磁盘I/O;这与迭代计算特别相关——不必将中间数据保存到磁盘
- 容错(弹性)不是通过复制数据获得的,而是通过跟踪应用于初始数据集(血统)的所有转换获得的。这样,万一发生故障,丢失的数据总是可以从其沿袭中重新计算,避免数据复制再次减少存储开销
- 惰性计算,即在需要时先进行计算
RDD 有两个主要限制:
- 它们是不可变的(只读)
- 它们只允许粗粒度转换(即适用于整个数据集的操作)
RDD 的一个很好的概念优势是它们将数据和代码打包在一起,从而更容易重用数据管道。
来源:Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing, An Architecture for Fast and General Data Processing on Large Clusters
RDD 是一种在 spark.The 中表示数据的方式,数据源可以是 JSON、CSV 文本文件或其他一些来源。 RDD 是容错的,这意味着它将数据存储在多个位置(即数据以分布式形式存储),因此如果一个节点发生故障,数据可以恢复。 在 RDD 中,数据始终可用。 然而,RDD 速度慢且难以编码,因此已经过时。 它已被 DataFrame 和 Dataset 的概念所取代。
RDD 是一个弹性分布式数据集。 它是spark的核心部分。 这是火花的低级别API。 DataFrame 和 DataSets 建立在 RDD 之上。 RDD 只不过是行级数据,即位于 n 个执行程序上。 RDD 是不可变的。意味着您无法更改 RDD。但是你可以使用 Transformation 和 Actions 创建新的 RDD
弹性分布式数据集 (RDD)
弹性:如果在spark中的节点上执行操作时丢失,数据集可以从历史中重建。
分布式:RDD中的数据被分成一个或多个分区,并作为对象的内存集合分布在集群中的工作节点上。
数据集:RDD是由记录组成的数据集,记录是数据集中唯一可识别的数据集合。