?一,RDD,DataFrame和DataSet

DataFrame參照了Pandas的思想,在RDD基礎上增加了schma,能夠獲取列名信息。

DataSet在DataFrame基礎上進一步增加了數據類型信息,可以在編譯時發現類型錯誤。DataFrame可以看成DataSet[Row],兩者的API介面完全相同。DataFrame和DataSet都支持SQL互動式查詢,可以和 Hive無縫銜接。

DataSet只有在Scala語言和Java語言的Spark介面中才支持,在Python和R語言介面只支持DataFrame,不支持DataSet。

二,創建DataFrame

1,通過toDF方法創建

可以將Seq,List或者 RDD轉換成DataFrame。

2,通過CreateDataFrame方法動態創建DataFrame

可以通過createDataFrame的方法指定rdd和schema創建DataFrame。

這種方法比較繁瑣,但是可以在預先不知道schema和數據類型的情況下在代碼中動態創建DataFrame。

3,通過讀取文件創建

可以讀取json文件,csv文件,hive數據表或者mysql數據表得到DataFrame。

三,創建DataSet

DataSet主要通過toDS方法從Seq,List或者RDD數據類型轉換得到,或者從DataFrame通過as方法轉換得到。

1,通過toDS方法創建

可以將Seq,List或者 RDD轉換成DataFrame。

2,通過DataFrame的as轉換方法得到DataSet

四,RDD,DataFrame和DataSet的相互轉換

Spark的RDD,DataFrame和DataSet三種數據結構之間可以相互轉換。

五,DataFrame/DataSet保存成文件

可以保存成csv文件,json文件,parquet文件或者保存成hive數據表。

六,DataFrame的API交互

DataFrame和DataSet具有完全相同的API,此處演示DataFrame常用的一些API使用。

1,Action操作

DataFrame的Action操作包括show,count,collect,collectAsList,describe,take,takeAsList,head,first等。

2,類RDD操作

DataFrame支持RDD常用的map,flatMap,filter,reduce,distinct,cache,sample,mapPartitions,foreach,intersect,except等操作。

可以把DataFrame當做數據類型為Row的RDD來進行操作。

3,類Excel操作

可以對DataFrame進行增加列,刪除列,重命名列,排序等操作,去除重複行,去除空行,就跟操作Excel表格一樣。

4,類SQL表操作

類SQL表操作包括表查詢(select,selectExpr,where,filter),表連接(join,union,unionAll),表分組聚合(groupby,agg,pivot)等操作。

七,DataFrame的SQL交互

將DataFrame/DataSet註冊為臨時表視圖或者全局表視圖後,可以使用sql語句對DataFrame進行交互。

以下為示範代碼。

八,用戶自定義函數

SparkSQL的用戶自定義函數包括二種類型,UDF和UDAF,即普通用戶自定義函數和用戶自定義聚合函數。

其中UDAF由分為弱類型UDAF和強類型UDAF,前者可以在DataFrame,DataSet,以及SQL語句中使用,後者僅可以在DataSet中使用。

1,普通UDF

2,弱類型UDAF

弱類型UDAF需要繼承UserDefinedAggregateFunction。

3,強類型UDAF

強類型UDAF需要繼承自Aggregator,不可註冊。

推薦閱讀:

沉靜中的流年:30分鐘理解Spark的基本原理?

zhuanlan.zhihu.com
圖標
沉靜中的流年:3小時Scala入門?

zhuanlan.zhihu.com
圖標
沉靜中的流年:1小時入門Spark之RDD編程?

zhuanlan.zhihu.com
圖標

公眾號後臺回復關鍵字:"SparkSQL"獲取本文全部代碼。

推薦閱讀:
相關文章