当前位置:  开发笔记 > 编程语言 > 正文

什么是火花中的RDD

如何解决《什么是火花中的RDD》经验,为你挑选了5个好方法。

定义说:

RDD是不可变的分布式对象集合

我不太明白这是什么意思.是否像存储在硬盘上的数据(分区对象)那么如何RDD可以拥有用户定义的类(如java,scala或python)

从这个链接:https://www.safaribooksonline.com/library/view/learning-spark/9781449359034/ch03.html它提到:

用户以两种方式创建RDD:通过加载外部数据集,或通过在其驱动程序中分发对象集合(例如,列表或集合)

我很难理解RDD的一般情况以及与spark和hadoop的关系.

请有人帮忙.



1> 小智..:

RDD本质上是一组数据的Spark表示,分布在多台机器上,使用API​​让您对其进行操作.RDD可以来自任何数据源,例如文本文件,通过JDBC的数据库等.

正式的定义是:

RDD是容错的并行数据结构,允许用户明确地将中间结果保存在内存中,控制其分区以优化数据放置,并使用丰富的运算符操作它们.

如果您想了解RDD的完整详细信息,请阅读其中一篇核心Spark学术论文,弹性分布式数据集:内存中集群计算的容错抽象


@kittu数据分布在分区中,您应该审核本课程[使用Apache Spark介绍大数据](https://www.edx.org/course/introduction-big-data-apache-spark-uc-berkeleyx- cs100-1x),通过使用`RDD`的`glom`方法,有更多可见的方法来实现数据的分区方式.

2> tharindu_DG..:

RDD是一个逻辑引用,dataset它在群集中的许多服务器计算机上进行分区.RDD是不可变的,并且在发生故障时可以自我恢复.

dataset可以是用户在外部加载的数据.它可以是json文件,csv文件或没有特定数据结构的文本文件.

在此输入图像描述

更新:以下是描述RDD内部结构的文章:

希望这可以帮助.



3> Mahesh..:

形式上,RDD是只读的分区记录集合.RDD只能通过对(1)稳定存储中的数据或(2)其他RDD的确定性操作来创建.

RDD具有以下属性 -

    不可变性和分区: RDD由分区的记录集合组成.分区是RDD中并行性的基本单元,每个分区是数据的一个逻辑分区,它是不可变的,并通过现有分区上的一些转换创建.可分性有助于实现计算的一致性.

    如果需要,用户可以根据他们想要连接多个数据集的键来定义自己的分区标准.

    粗粒度操作: 粗粒度操作是应用于数据集中所有元素的操作.例如 - 将对RDD分区中的所有元素执行的map,filter或groupBy操作.

    容错: 由于RDD是在一组转换上创建的,它会记录这些转换,而不是实际数据.这些转换的图形产生一个RDD称为Lineage Graph.

例如 -

firstRDD=sc.textFile("hdfs://...")

secondRDD=firstRDD.filter(someFunction);

thirdRDD = secondRDD.map(someFunction);

result = thirdRDD.count()

如果我们丢失了RDD的一些分区,我们可以在lineage中重放该分区上的转换来实现相同的计算,而不是跨多个节点进行数据复制.这个特性是RDD的最大好处,因为它节省了很多努力在数据管理和复制中,从而实现更快的计算.

    延迟评估: Spark在第一次在动作中使用它时会懒惰地计算RDD,以便它可以进行管道转换.因此,在上面的示例中,仅在调用count()动作时才会评估RDD.

    持久性: 用户可以指出他们将重用哪些RDD并为他们选择存储策略(例如,内存存储或磁盘等)

RDD的这些属性使它们可用于快速计算.



4> pgirard..:

弹性分布式数据集(RDD)是Spark表示数据的方式.数据可以来自各种来源:

文本文件

CSV文件

JSON文件

数据库(通过JBDC驱动程序)

与Spark有关的RDD

Spark只是RDD的一个实现.

与Hadoop相关的RDD

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在分区中"分布式"(分离).每个分区可以存在于内存中或机器的磁盘上.当Spark想要在分区上启动任务时,他将其发送到包含该分区的机器.这被称为"本地感知调度".

资料来源:关于Spark的优秀研究论文:http: //spark.apache.org/research.html

包括Ewan Leith建议的论文.



5> 小智..:

RDD =弹性分布式数据集

弹性(字典含义)=(物质或物体的)在弯曲,拉伸或压缩后能够反弹或弹回形状

RDD定义为(来自LearningSpark - OREILLY):始终重新计算RDD的能力实际上是为什么RDD被称为"弹性".当持有RDD数据的机器出现故障时,Spark使用此功能重新计算丢失的分区,对用户透明.

这意味着"数据"始终可用.此外,Spark可以在没有Hadoop的情况下运行,因此不会复制数据.在Passive Standby Namenode的帮助下,Hadoop2.0的最佳特性之一是"高可用性".Spark中的RDD也是如此.

给定的RDD(数据)可以跨越Spark集群中的各个节点(就像在基于Hadoop的集群中一样).

如果任何节点崩溃,Spark可以重新计算RDD并将数据加载到其他节点中,并且数据始终可用.Spark围绕弹性分布式数据集(RDD)的概念展开,RDD是一个容错的容错集合,可以并行操作(http://spark.apache.org/docs/latest/programming-guide.html #vlexible-distributed-datasets-rdds)

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有