1. 程式人生 > >SparkCore(11):RDD概念和建立兩種方法

SparkCore(11):RDD概念和建立兩種方法

一、RDD概念

1.概念

Resilient Distributed Datasets彈性分散式資料集,預設情況下:每一個block對應一個分割槽,一個分割槽會開啟一個task來處理。

(a)Resilient:可以存在給定不同數目的分割槽、資料快取的時候可以快取一部分資料也可以快取全部資料 (b)Distributed:分割槽可以分佈到不同的executor執行(也就是不同的worker/NM上執行) (c)Datasets:內部儲存是資料

2.特性

(1)是一系列的分片,分割槽 (2)每個分片有一個方法來做計算 (3)rdd會有依賴其他rdd的操作,可以通過wordCountRDD.toDebugString來檢視 (4)(可選項)如果rdd是二元組,就會存在分割槽器(預設是hashpartition) (5)(可選項)最佳位置。資料在哪臺機器上,任務就啟在哪個機器上,資料在本地上,不用走網路。不過資料進行最後彙總的時候就要走網路。(hdfs file的block塊)

二、RDD建立方法

1.外部資料

val path = "hdfs://192.168.31.3:8020/page_views.data"
val originalRdd: RDD[String] = sc.textFile(path)

2.記憶體中資料:基於序列化進行建立

scala> val seq = List(1,2,3,4,5,6,7)
seq: List[Int] = List(1, 2, 3, 4, 5, 6, 7)

scala> val rdd2 = sc.parallelize(seq)
rdd2: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[4] at parallelize at <console>:29