spark怎麼建立RDD,一個建立RDD的方式有哪些它們的區別是什麼!!(Unit2)
spark的程式設計介面包括
1.分割槽資訊,資料集的最小分片
(1)Patitions()用法:
scala> val part=sc.textFile("/user/README.md",6) part: org.apache.spark.rdd.RDD[String] = /user/README.md MapPartitionsRDD[9] at textFile at <console>:24 scala> part.partitions.size res3: Int = 6 #可以用來列印分割槽個數
2.依賴關係,指向其父RDD
(1)Dependencies()使用方法:
scala> val part=sc.textFile("/user/README.md") scala> val wordmap=part.flatMap(_.split(" ")).map(x=>(x,1)) scala> wordmap.dependencies.foreach{dep=> println(dep.getClass)} #調取getClass方法可以獲取依賴方式 class org.apache.spark.OneToOneDependency scala> wordredue.dependencies.foreach{dep=> println(dep.getClass)} class org.apache.spark.ShuffleDependency
3.函式,基於夫RDD的計算方法(Iterator)
(1):mappartition(傳入一個函式)
分割槽函預設的有兩個分割槽器對每個分割槽進行計算,例如:
val a=sc.parallelize(1to9,3).mapPatitions(f)就是對1-3,4-6,7-9分別進行f操作
4.劃分策略和資料位置的元資料
1.(hasPartitioner)
2.(RangePartitioner)
使用Partitioner(只對kv形式的RDD有意義非kv格式都是None)對rdd進行操作檢視分割槽方式
rdd的建立操作分兩種
1,並行化集合的建立
(1)SparkContext的parallelize方法,它是在已知的集合建立的,會被複制,然後利用這個複製的建立一個可以被並行處理的分散式資料集這個方法可以有一個或者兩個引數必須有個Seq引數,然後後面可以跟一個分割槽數量,如果你不輸入一般就是你配置的是的一個
(2)makeRDD()這個方法可以知道首選分割槽,意思就是可以指定rdd放在那個節點上
2.外部儲存建立操作,可以將hadoop支援的檔案轉化成RDD(但是你的所有節點都要能訪問到檔案)
(1)textFILE(檔案路徑,分片數量)這個分數量不能小於hdfs的快數量!!!
(2)sequenceFILE(),sequenceFILE是hadoop儲存二進位制形式的KV格式的一種文字檔案(使用較少)
(3)hadoopFILE()
(4)hadoopRDD(),可以將其他的形式的hadoop資料轉化成RDD
最後給大家提一點就是我們應該如何設定rdd的並行度,並行度最好是你資源的兩倍