RDD(彈性分散式資料集)是spark中最基本的抽象資料型別。在此基礎上,spark又引入了DataFrame和DataSet。在平時的程式設計中,我們會經常遇到RDD和DataFrame之間的轉換操作。那麼,這兩者有什麼區別呢?
一般我們在spark程式碼中都是透過spark SQL或者read操作從hive表中獲取資料,返回的都是DataFrame型別,包含了元資料資訊,能夠透過select、filter等運算元直接操作資料的某些欄位。即DataFrame提供了資料的欄位名、資料型別等,從而可以方便地使用spark SQL語句進行操作。而RDD是不清楚資料的這些詳細資訊的,因此不支援spark SQL操作。
如果需要map操作,一般會將DataFrame轉為RDD。此時就需要在程式碼中新增一行:
這樣就可以支援兩者之間的潛在轉換。
DataFrame轉為RDD後,需要透過解析來獲取每個欄位的值。
RDD如果需要轉為DataFrame,一般都會給欄位命名,方便下面的使用。
在實際使用中,這兩者其實差異性不是很大,主要是spark支援兩者的切換。
有說的不對的地方,請多指教啊~
RDD(彈性分散式資料集)是spark中最基本的抽象資料型別。在此基礎上,spark又引入了DataFrame和DataSet。在平時的程式設計中,我們會經常遇到RDD和DataFrame之間的轉換操作。那麼,這兩者有什麼區別呢?
一般我們在spark程式碼中都是透過spark SQL或者read操作從hive表中獲取資料,返回的都是DataFrame型別,包含了元資料資訊,能夠透過select、filter等運算元直接操作資料的某些欄位。即DataFrame提供了資料的欄位名、資料型別等,從而可以方便地使用spark SQL語句進行操作。而RDD是不清楚資料的這些詳細資訊的,因此不支援spark SQL操作。
如果需要map操作,一般會將DataFrame轉為RDD。此時就需要在程式碼中新增一行:
這樣就可以支援兩者之間的潛在轉換。
DataFrame轉為RDD後,需要透過解析來獲取每個欄位的值。
RDD如果需要轉為DataFrame,一般都會給欄位命名,方便下面的使用。
在實際使用中,這兩者其實差異性不是很大,主要是spark支援兩者的切換。
有說的不對的地方,請多指教啊~