1. 程式人生 > >RDD、DF、DS的區別與聯系

RDD、DF、DS的區別與聯系

解析 sel 類型 特殊 行數據 好的 park art 轉化

RDD.DataFrame.DataSet的區別和聯系

共性:

1)都是spark中得彈性分布式數據集,輕量級

2)都是惰性機制,延遲計算

3)根據內存情況,自動緩存,加快計算速度

4)都有partition分區概念

5)眾多相同得算子:map flatmap 等等

區別:

1)RDD不支持SQL

2)DF每一行都是Row類型,不能直接訪問字段,必須解析才行

3)DS每一行是什麽類型是不一定的,在自定義了case class之後可以很自由的獲 得每一行的信息

4)DataFrameDataset均支持spark sql的操作,比如selectgroup by之類,還 能註冊臨時表/視窗,進行

sql語句操作

5)可以看出,Dataset在需要訪問列中的某個字段時是非常方便的,然而,如果要 寫一些適配性很強的函數時,如果使用Dataset,行的類型又不確定,可能是 各種case class,無法實現適配,這時候用DataFrameDataset[Row]就能比較 好的解決問題。

轉化:

1)DF/DSRDD

  1. Val Rdd = DF/DS.rdd

2) DS/RDDDF

  1. import spark.implicits._
  2. 調用 toDF(就是把一行數據封裝成row類型)

3RDDDS

RDD的每一行封裝成樣例類,再調用toDS方法

4)DFDS

根據row字段定義樣例類,再調用

asDS方法[樣例類]

特別註意:

在使用一些特殊的操作時,一定要加上 import spark.implicits._ 不然toDFtoDS無法使用

RDD、DF、DS的區別與聯系