定义是:
RDD是不可变的分布式对象集合。
我不太明白这是什么意思。它与存储在硬盘上的数据(分区对象)一样吗?如果是这样,那么为什么RDD可以有用户定义的类(如java、scala或python)?
从这个链接:https://www.safaribooksonline.com/library/view/learning-spark/9781449359034/ch03.html它提到:
用户以两种方式创建RDDs :通过加载外部数据集,或者通过在其驱动程序中分发对象集合(例如,列表或集合
我对RDD的理解以及与spark和hadoop的关系真的很困惑。
有人能帮帮忙吗。
发布于 2015-12-23 18:14:58
从本质上讲,RDD是一组数据的Spark表示,这些数据分布在多台机器上,使用API让您可以对其执行操作。RDD可以来自任何数据源,例如文本文件、通过JDBC的数据库等。
正式的定义是:
RDDs是一种容错的并行数据结构,允许用户显式地将中间结果持久化到内存中,控制其分区以优化数据放置,并使用一组丰富的操作符对其进行操作。
如果你想了解RDD的完整细节,请阅读Spark的核心学术论文之一,Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing
发布于 2015-12-23 18:05:14
RDD是dataset
的逻辑参考,它跨集群中的许多服务器机器进行分区。RDD是不可变的,并且在发生故障时可以自我恢复。
dataset
可以是用户从外部加载的数据。它可以是json文件、csv文件或没有特定数据结构的文本文件。
UPDATE:Here是一篇描述内部机制的文章:
希望这能有所帮助。
发布于 2017-01-02 13:04:25
从形式上讲,RDD是一个只读的、分区的记录集合。RDDs只能通过(1)稳定存储中的数据或(2)其他RDDs上的确定性操作来创建。
RDDs具有以下属性-
如果粗粒度操作:粗粒度操作是应用于数据集中所有元素的操作,则用户可以基于他们想要连接多个数据集的键来定义他们自己的分区标准。例如-将对RDD.
例如:
firstRDD=sc.textFile("hdfs://...")
secondRDD=firstRDD.filter(someFunction);
thirdRDD = secondRDD.map(someFunction);
result = thirdRDD.count()
如果我们丢失了RDD的某个分区,我们可以在该分区上重放转换以实现相同的计算,而不是跨多个nodes.This特性进行数据复制。RDD的最大好处是它节省了大量的数据管理和复制工作,从而实现了更快的计算速度。
时,才会评估RDD。用户可以指示他们将重用哪些RDD,并为它们选择存储策略(例如,内存中存储或磁盘上等)
RDDs的这些属性使它们对于快速计算非常有用。
https://stackoverflow.com/questions/34433027
复制相似问题