zoukankan      html  css  js  c++  java
  • Spark- RDD简介

    Spark里面提供了一个比较重要的抽象——弹性分布式数据集(resilient distributed dataset),简称RDD。弹性:数据可大可小,可分布在内存或磁盘,当某台机器宕机时,能够按照RDD的liveage重新计算,从而恢复。

    RDD有5个特性:

    1.一个分区列表,用于并行计算,每个分区对应一个原子数据集,作为这个分区的数据输入

    2.计算这个RDD某个分区数据(这个分区数据是由父RDD对应分区计算出来的)函数

    3.一个依赖列表,这个rdd依赖的父rdd是哪些(在计算的时候可以通过这个依赖来容错)

    4.这个rdd的分区元素数据信息,其实就是该RDD怎么分区的,比如某个RDD是通过hash partition得到的

    5.分区数据的存储地址,用来实现计算任务的本地性,即把计算放在由相关数据的机器上执行。  

    6.spark的计算是“流式”计算,如,有可能一个block的数据量很大,一次性读出来肯定很占内存,所有的数据块都都出来时可能内存还不够,那么它不是将整个block读出来,而是读出一条处理计算一条,类似流式计算,这样可以省内存不用担心内存不够。 

    创建RDD的三种方式

    方式一:从存储在存储系统中的数据上来创建,比如:

    val inputRdd: RDD[(LongWritable,Text)] = sc.newAPIHadoopFile("hdfs://master:9000/word.txt",classOf[TextInputFormat],classOf[LongWritable])

    这个就是从hdfs存储系统中的数据创建一个RDD

    方式二:可以基于一个已经存在的RDD来创建一个RDD

    val line: RDD[(String, Int)] = lines.map(line=>(line,1))  //从已经存在的lines上创建一个新的RDD

    方式三:可以基于一个已经在spark内存中的列表数据来创建一个RDD,比如:

    val data = Array(1, 2, 3, 4, 5)
    val distData = sc.parallelize(data)

    spark sql将Dataset的api翻译成RDD的api来达到计算目的

    spark ml是利用Dataset的api和RDD的api来达到计算目的

    spark mllib是利用RDD api来达到计算目的

    spark Streaming将DStreaming的api翻译成RDD api来达到计算目的

    spark graphx是利用RDD api以及拓展RDD来达到计算目的

  • 相关阅读:
    mysql批量插入数据的基类
    mount命令解析
    常用linux命令记录
    转载一篇大神的博客文章
    linux查看网卡状态
    centos7配置网卡绑定
    coentos7安装python3
    阿里云ecs 硬盘在线扩容
    centos7安装redis5
    centos7 rpm安装nginx
  • 原文地址:https://www.cnblogs.com/RzCong/p/7812169.html
Copyright © 2011-2022 走看看