spark2.0機器學習——數據結構

在spark中,RDD、DataFrame、Dataset是最常用的數據結構,全都是spark平臺下的分佈式彈性數據集,為處理超大型數據提供便利,三者都有惰性機制,在進行創建、轉換,如map方法時,不會立即執行,只有在遇到Action如foreach時,三者才會開始遍歷運算。

彈性數據集(RDD)

RDD是Spark建立之初的核心API,一般和spark mlib同時使用(目前spark mllib處於維護狀態,將被ml取代),不支持sparksql操作。

RDD的數據沒有定義Schema(也就是字段及數據類型),使用上必須有map/reduce的概念,它是一個容錯且可以執行並行操作的元素的集合。有兩種方法可以創建 RDD : 在你的 driver program(驅動程序)中 parallelizing 一個已存在的集合,或者在外部存儲系統中引用一個數據集,例如,一個共享文件系統,HDFS,HBase,或者提供 Hadoop InputFormat 的任何數據源。

創建一個RDD(在spark2.0中,此時的RDD是Dataset)

創建RDD常用方法:(暫時在單機的模式下)

1,一個列表傳入SparkContext的parallelize()方法中生成RDD

2,textFile方法讀取外部數據創建RDD

spark2.0機器學習——數據結構

Spark DataFrame

DataFrame 創建時必須定義Schema(也就是字段及數據類型),所以在早期版本中DataFrame也被稱為Schema RDD。

創建DataFrame的三種方式:

1,由RDD生成DataFrame的toDF方法

spark2.0機器學習——數據結構

2,通過createDataFrame方法

spark2.0機器學習——數據結構

3,通過read讀取外部數據

spark2.0機器學習——數據結構

spark2.0機器學習——數據結構

Dataset

Dataset和DataFrame擁有完全相同的成員函數,DataFrame也可以叫Dataset[Row],每一行的類型是Row,只有通過解析才能獲取各個字段的值,無法直接獲取每一列的值。

DataFrame與Dataset一般與spark ml同時使用,DataFrame與Dataset均支持sparksql的操作,比如select,groupby之類,還能註冊臨時表/視窗,進行sql語句操作

DataFrame與Dataset支持一些特別方便的保存方式,比如保存成csv,可以帶上表頭,這樣每一列的字段名一目瞭然

對於我來說,在數據處理和機器學習過程中,很少用到DataSet,一般都是用DataFrame這種格式,因為python中也提供類似的DataFrame格式數據,結合python使用更加順手!


分享到:


相關文章: