和Scala RDD API相比,SparkR RDD API有一些適合R的特點(diǎn):
- SparkR RDD中存儲(chǔ)的元素是R的數(shù)據(jù)類型。
- SparkR RDD transformation操作應(yīng)用的是R函數(shù)。
- RDD是一組分布式存儲(chǔ)的元素,而R是用list來表示一組元素的有序集合,因此SparkR將RDD整體上視為一個(gè)分布式的list。Scala API 中RDD的每個(gè)分區(qū)的數(shù)據(jù)由iterator來表示和訪問,而在SparkR RDD中,每個(gè)分區(qū)的數(shù)據(jù)用一個(gè)list來表示,應(yīng)用到分區(qū)的轉(zhuǎn)換操作,如mapPartitions(),接收到的分區(qū)數(shù)據(jù)是一個(gè)list而不是iterator。
- 為了符合R用戶經(jīng)常使用lapply()對(duì)一個(gè)list中的每一個(gè)元素應(yīng)用某個(gè)指定的函數(shù)的習(xí)慣,SparkR在RDD類上提供了SparkR專有的transformation方法:lapply()、lapplyPartition()、lapplyPartitionsWithIndex(),分別對(duì)應(yīng)于Scala API的map()、mapPartitions()、mapPartitionsWithIndex()。