20 - Spark - RDD的創建(內存&外部存儲)

第1章 RDD概述

1.1 什麼是RDD

RDD(Resilient Distributed Dataset)叫做分佈式數據集,是Spark中最基本的數據抽象。代碼中是一個抽象類,它代表一個不可變、可分區、裏面的元素可並行計算的集合。

1.2 RDD的屬性

1)一組分區(Partition),即數據集的基本組成單位;
2)一個計算每個分區的函數;
3)RDD之間的依賴關係;
4)一個Partitioner,即RDD的分片函數;
5)一個列表,存儲存取每個Partition的優先位置(preferred location)。

1.3 RDD特點

RDD表示只讀的分區的數據集,對RDD進行改動,只能通過RDD的轉換操作,由一個RDD得到一個新的RDD,新的RDD包含了從其他RDD衍生所必需的信息。RDDs之間存在依賴,RDD的執行是按照血緣關係延時計算的。如果血緣關係較長,可以通過持久化RDD來切斷血緣關係。

三種讀取方式

object Spark01_RDD extends App {
  // 設定Spark計算環境
  val config: SparkConf = new SparkConf().setMaster("local[*]").setAppName("WordCount")

  // 創建上下文
  val sc = new SparkContext(config)

  // 創建RDD
  // 1) 從內存中創建 markRDD,底層實現就是parallelize
  val listRDD = sc.makeRDD(List(1, 2, 3, 4))

  // 2) 從內存中創建 parallelize
  val arrayRDD = sc.parallelize(Array(1, 2, 3, 4))
  listRDD.collect().foreach(println)

  // 3) 從外部存儲中創建
  // 默認情況下,可以讀取項目路徑,也可以讀取其它路徑:HDFS
  // 默認從文件中讀取的數據都是字符串類型
  private val fileRDD: RDD[String] = sc.textFile("in")
  listRDD.saveAsTextFile("output")

}

makeRDD與parallelize 本質是相同的

/** Distribute a local Scala collection to form an RDD.
   *
   * This method is identical to `parallelize`.
   * @param seq Scala collection to distribute
   * @param numSlices number of partitions to divide the collection into
   * @return RDD representing distributed collection
   */
  def makeRDD[T: ClassTag](
      seq: Seq[T],
      numSlices: Int = defaultParallelism): RDD[T] = withScope {
    parallelize(seq, numSlices)
  }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章