區別
RDD是分布式的不可變的抽象的數據集,比如,RDD[Person]是以Person為類型參數,但是,Person類的內部結構對于RDD而言卻是不可知的。
DataFrame是以RDD為基礎的分布式的抽象數據集,也就是分布式的Row類型的集合(每個Row對象代表一行記錄),提供了詳細的結構信息,即Schema信息。
Spark SQL可以清楚地知道該數據集中包含哪些列、每列的名稱和類型。
應用場景
RDD的使用場景: 你需要使用low-level的transformation和action來控制你的數據集;
你得數據集非結構化,比如,流媒體或者文本流; 你想使用函數式編程來操作你得數據,而不是用特定領域語言(DSL)表達;
你不在乎schema,比如,當通過名字或者列處理(或訪問)數據屬性不在意列式存儲格式;
你放棄使用DataFrame和Dataset來優化結構化和半結構化數據集; DataFrame的使用場景: 你想使用豐富的語義,high-level抽象,和特定領域語言API,那你可DataFrame或者Dataset;
你處理的半結構化數據集需要high-level表達, filter,map,aggregation,average,sum ,SQL 查詢,列式訪問和使用lambda函數,那你可DataFrame或者Dataset;
你想利用編譯時高度的type-safety,Catalyst優化和Tungsten的code生成,那你可DataFrame或者Dataset;
你想統一和簡化API使用跨Spark的Library,那你可DataFrame或者Dataset;
如果你是一個R使用者,那你可DataFrame或者Dataset;
如果你是一個Python使用者,那你可DataFrame或者Dataset。