zoukankan      html  css  js  c++  java
  • 什么是Spark RDD以及我们为什么需要它?

    随着时间的推移,大数据分析已达到一个新的程度,反过来又改变了其运作模式和期望。今天的大数据分析不仅处理大量数据,而且还具有快速周转时间的既定目标。虽然Hadoop是大数据分析背后无与伦比的技术,但它在快速处理方面存在一些不足。但是,随着Spark的出现,数据处理速度便有了更大的期望。

    当我们谈到Spark时,我们想到的第一个术语是弹性分布式数据集(RDD)或Spark RDD,它使数据处理更快。此外,这也是Spark的关键特性,它支持在计算期间对数据集进行逻辑分区。

    在此文中,我们将讨论Spark RDD的技术方面,进一步了解Spark RDD的底层技术细节。除此之外,还将概述RDD在Spark中的使用。

    Spark RDD及其特性

    RDD定义为Resilient Distributed Dataset(弹性分布式数据集),其中每个术语都表示其特性。

    • Resilient: 通过使用RDD谱系图(DAG)实现容错。因此,当节点发生故障时,可以进行重新计算。
    • Distributed:  Spark RDD的数据集驻留在多个节点中。
    • Dataset: 您将使用的数据记录。

    在Hadoop设计中,RDD是一个挑战。然而,使用Spark RDD解决方案似乎非常高效,这取决于它的惰性计算。Spark中的RDDs按需工作。因此,它节省了大量的数据处理时间和整个过程的效率。

    Hadoop Map-reduce通过其特性克服了Spark RDD的许多缺点,这是Spark RDD流行的主要原因。

    Spark RDD的核心特性

    • 内存计算
    • 惰性计算
    • 容错
    • 不可变性
    • 分区
    • 持久性
    • 粗粒度操作
    • 位置粘性

    我们将在下一节中逐步讨论这些问题。

    Spark RDD是一种表示分布在多个节点上的数据集的技术,可以并行操作。换句话说,Spark RDD是Apache Spark的主要容错抽象,也是Apache Spark的基本数据结构。

    Spark中的RDD是一个不可变的分布式对象集合,它支持以下两种方法

    • cache()
    • persist()

    Spark RDD的内存缓存技术对Spark RDD中的数据集进行逻辑分区。内存缓存的好处在于,如果数据不合适,它会将多余的数据发送到磁盘进行重新计算。这就是为什么它被称为弹性。因此,您可以在需要时在Spark中提取RDD。因此,它使整个数据处理更快。

    Spark在数据处理方面比Hadoop快100倍。下面是使Apache Spark更快的因素!

    Spark RDD支持的操作

    Spark中的RDD支持两种类型的操作:

    1. Transformations
    2. Actions

    Transformation

    transformation的情况下,Spark RDD从现有数据集创建一个新的数据集。要引用一个Spark RDD转换示例,我们可以说map是一个转换,它通过一个函数传递每个dataset元素。作为返回值,它发送表示结果的新RDD。

    Scala:

    val l = sc.textFile(“example.txt”)
    
    val lLengths = l.map(s => s.length)
    
    val totalLength = lLengths.reduce((a, b) => a + b)

    如果以后想使用llength,可以使用persist()函数,如下所示:

    lLengths. persist()

    您可以从https://spark.apache.org/参考API文档以获得Spark RDD支持的转换的详细列表。

    Spark RDD支持两种类型的转换:

    1. Narrow transformation
    2. Wide transformation

    Narrow transformation的情况下,输出RDD的父RDD与一个数据分区相关联。而在广泛的转换中,输出RDD是许多父RDD分区的结果。换句话说,这就是所谓的shuffle transformation。

    所有Spark RDD转换都是惰性的,因为它们不会立即计算结果。相反,它们记住对一些基本数据集应用的转换,这些数据集引用了一些文件,如示例所示。当任何操作需要一个结果时,只有转换在Spark RDD中计算。这进而导致更快和更有效的数据处理。

    每次对每个转换后的RDD运行操作时,都会在Spark RDD中进行重新计算。但是,使用persist方法Spark可以将元素保存在集群中,以便下次查询时更快地访问它。还支持在磁盘上持久存储Spark RDDs或跨多个节点进行复制。

    Actions

    在操作期间,RDD在对数据集执行计算之后,将一个值返回给驱动程序。例如,reduce是一个使用某个函数聚合所有RDD元素并将最终结果返回给主程序的操作

    创建Spark RDD有以下三个过程。

    1. 使用并行集合
    2. 从外部数据集(即。其他外部存储系统,如共享文件系统、HBase或HDFS)
    3. 来自现有Apache Spark RDDs

    接下来,我们将讨论这些方法中的每一种,以了解如何使用它们来创建Spark RDDs。

    弹性分布式数据集(RDD)是Apache Spark的重要特性,这使得它非常重要。让我们了解Apache Spark在大数据行业中的重要性。

    并行集合

    您可以通过在Java、Scala或Python中现有的驱动程序集合上调用SparkContext接口的parallelize方法来创建并行集合。在本例中,复制的集合元素构成一个分布式数据集,可以并行操作。

    Scala中并行化集合的Spark RDD例子:

    将数字2到6保存为并行集合:

    val collection = Array(2, 3, 4, 5,6)
    
    val prData = spark.sparkContext.parallelize(collection)

    在这里,创建的分布式数据集prData能够并行操作。因此,您可以调用prData。reduce()将数组中的元素相加。

    并行化集合的一个关键参数是决定要将数据集分割成哪些分区号。在本例中,Spark为集群的各个分区运行单个任务。通常,对于集群中的单个CPU, 2-4个分区是理想的。不过Spark会根据集群自动设置分区的数量。但是,用户也可以通过将其作为并行化的第二个参数传递来手动设置它。

    外部数据库

    Apache Spark可以从任何Hadoop支持的文件存储创建分布式数据集,其中可能包括:

    • Local file system
    • HDFS
    • Cassandra
    • HBase
    • Amazon S3

    Spark支持类似的文件格式:

    • Text files
    • Sequence Files
    • CSV
    • JSON
    • Any Hadoop Input Format

    例如,可以使用SparkContext接口的textFile方法创建文本文件Spark RDDs。这个方法接受文件的URL,不管它是系统上的本地路径,还是hdfs://,等等)。最后,它将文件作为行集合读取。

    这里的重要因素是,如果使用本地文件系统上的路径,则必须在从节点上的相同路径上访问该文件。因此,要么必须将数据文件复制到所有从节点,要么需要使用网络挂载的共享文件系统。

    您可以使用数据帧读取器接口来加载外部数据集,然后使用. RDD方法将数据集<Row>转换为RDD <Row>。

    下面的文本文件转换示例稍后将返回字符串数据集。

    val exDataRDD = spark.read.textFile(“path/of/text/file”).rdd

    来自现有RDDS

    RDDS是不变的;因此你可以改变它。但是,使用transformation,您可以从现有的RDD创建一个新的RDD。由于没有因为突变而发生变化,所以它在集群中保持一致性。为此目的使用的操作很少是

    • map
    • filter
    • count
    • distinct
    • flatmap

    例如:

    val seasons =spark.sparkContext.parallelize(Seq(“summer”, “monsoon”, “spring”, “winter”))
    
    val seasons1= seasons.map(s => (s.charAt(0), s))
  • 相关阅读:
    简例 一次执行多条mysql insert语句
    javax/javaee-api/ Maven依赖
    关闭页面前提示或保存数据
    SpringMVC的controller方法上若需要参数 如User
    方正飞越 A600硬改BIOS激活win7的工具与方法。
    Win7下IE11点击无反应的解决方法
    WinXP局域网共享设置
    使用VHD,让Win XP和 Win2003 运行在内存中
    dd if=/dev/zero of=的含义是什么?Linux 下的dd命令使用详解
    win8.1点击“更改电脑设置”无反应(闪退)
  • 原文地址:https://www.cnblogs.com/tcppdu/p/10604710.html
Copyright © 2011-2022 走看看