天天看點

Spark學習之Dataset (DataFrame) 的基礎操作

Dataset (DataFrame)的常見有類型操作、無類型操作

轉換類型的操作主要包含:flatMap、map、mapPartitions、transform、as

(1)flatMap

方法描述:通過 flatMap 可以将一條資料轉為一個數組, 後再展開這個數組放入 Dataset

(2)map

方法描述:map 可以将資料集中每條資料轉為另一種形式(通過傳入計算函數來實作)

(3)mapPartitions

方法描述:mapPartitions 和 map 一樣, 但是 map 的處理機關是每條資料, mapPartitions 的處理機關是每個分區

(4)transform

方法描述:map 和 mapPartitions 以及transform都是轉換, map 和 mapPartitions 是針對資料, 而 transform 是針對整個資料集, 這種方式最大的差別就是 transform 可以直接拿到 Dataset 進行操作

Spark學習之Dataset (DataFrame) 的基礎操作

(5)as

方法描述:as[Type] 算子的主要作用是将弱類型的 Dataset 轉為強類型的 Dataset, 它有很多适用場景, 但是最常見的還是在讀取資料的時候, 因為DataFrameReader體系大部分情況下是将讀出來的資料轉換為 DataFrame的形式, 如果後續需要使用 Dataset 的強類型 API, 則需要将 DataFrame 轉為 Dataset. 可以使用 as[Type] 算子完成這種操作

過濾類型的操作主要包含:filter

(1)filter

方法描述:用來按照條件過濾資料集

集合類型的操作主要包含:groupBykey

(1)groupByKey

方法描述:grouByKey 算子的傳回結果是 KeyValueGroupedDataset, 而不是一個 Dataset, 是以必須要先經過 KeyValueGroupedDataset 中的方法進行聚合, 再轉回 Dataset, 才能使用 Action 得出結果。

其實這也印證了分組後必須聚合的道理

切分類型的操作主要包含:randomSplit、sample

(1)randomSplit

方法描述:randomSplit 會按照傳入的權重随機将一個 Dataset 分為多個 Dataset, 傳入 randomSplit 的數組有多少個權重, 最終就會生成多少個 Dataset, 這些權重的加倍和應該為 1, 否則将被标準化

(2)sample

方法描述:sample 會随機在 Dataset 中抽樣

排序類型的操作主要包含:orderBy、sort

(1)orderBy

方法描述:orderBy 配合 Column 的 API, 可以實作正反序排列

(2)sort

方法描述:其實 orderBy 是 sort 的别名, 是以它們所實作的功能是一樣的

分區類型的操作主要包含:coalesce、repartitions

(1)coalesce

方法描述:減少分區, 此算子和 RDD 中的 coalesce 不同, Dataset 中的 coalesce 隻能減少分區數, coalesce 會直接建立一個邏輯操作, 并且設定 Shuffle 為 false

(2)repartitions

方法描述:repartitions 有兩個作用, 一個是重分區到特定的分區數, 另一個是按照某一列來分區, 類似于 SQL 中的 DISTRIBUTE BY

去重類型的操作主要包含:dropDuplicates、distinct*

(1)dropDuplicates

方法描述:使用 dropDuplicates 可以去掉某一些列中重複的行

(2)distinct

方法描述:當 dropDuplicates 中沒有傳入列名的時候, 其含義是根據所有列去重, dropDuplicates() 方法還有一個别名, 叫做 distinct

Spark學習之Dataset (DataFrame) 的基礎操作

是以, 使用 distinct 也可以去重, 并且隻能根據所有的列來去重

集合類型的操作主要包含:*except、intersect、union、limit*

(1)except

方法描述:except 和 SQL 語句中的 except 一個意思, 是求得 ds1 中不存在于 ds2 中的資料, 其實就是差集

(2)intersect

方法描述:求得兩個集合的交集

(3)union

方法描述:求得兩個集合的并集

(4)limit

方法描述:限制結果集數量

選擇類型的操作主要包含:select、selectExpr、withColumn、withColumnRenamed

(1)select

方法描述:select 用來選擇某些列出現在結果集中

(2)selectExpr

方法描述:在 SQL 語句中, 經常可以在 select 子句中使用 count(age), rand() 等函數, 在 selectExpr 中就可以使用這樣的 SQL 表達式, 同時使用 select 配合 expr 函數也可以做到類似的效果

(3)withColumn

方法描述:通過 Column 對象在 Dataset 中建立一個新的列或者修改原來的列

(4)withColumnRenamed

方法描述:修改列名

剪切類型的操作主要包含:*drop*

(1)drop

方法描述:剪掉某個列

聚合類型的操作主要包含:groupBy

(1)groupBy

方法描述:按照給定的行進行分組

繼續閱讀