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