上面的一些實驗測試,是為了驗證RDD的一些特征。
RDD上的一些復雜的方法:將老師發的文件spark_rdd_api.txt文件中的練習一下即可。查看分區中的數據是什么:val rdd1 = sc.parallelize(List(1,2,3,4,5,6,7,8,9), 2)rdd1.mapPartitionsWithIndex(func).collect常用函數:math.max(_,_)和math.min(_, _)RDD并沒有定義reduceByKey方法,但是它能調這個方法,其實它是在PairRDDFunction中定義的。它將普通的RDD轉換成了PairRDDFunction,在RDD單例對象中就定義了一個rddToPairRDDFunction方法。在SparkContext(注意是object)中定義了很多implicit,其中就包含rddToPairRDDFunction方法,它已經被廢棄,它調用的就是RDD單例對象中定義的那個rddToPairRDDFunction方法。foreachPartition:這個方法在以后開發中用的非常非常多?。。∷梢詫⒚恳粋€分區中的數據拿出來進行處理,在Spark中計算好的數據不需要sqoop工具,定義一個函數就可以直接往關系型數據庫中寫(后面會專門有例子講)。注意coalesce(分區數, Boolean)方法和repartition方法的關系,其實repartition方法底層調的就是coalesce(分區數, shuffle=true),只不過給它傳了一個shuffle=true,表示分區中的數據一定要shuffle,也就是說數據一定要在網絡中傳遞,以數據為單位重新分配到新的RDD中。如果我們直接調用coalesce(分區數,false)方法給它傳一個false的話,就不會有shuffle。它只會以分區為單位分配給新的RDD中的分區。而分區中的數據是不會重新洗牌的。
新聞熱點
疑難解答