# DataFrame

### 介紹 DataFrame 之前，先來介紹什麼是 DataSet

## Dataset :

> * Dataset 在 Spark 1.6 版加入的 Interface；在 2.x 版開始成為了 Spark 的主要 libaries 的基石。
> * Dataset 是個強型別的分散式的資料集合，我們可以表示成 Dataset\[T]，針對特定的物件，可以透過一些相關性操作及函式操作去做平行化的 Transformation。
> * 嚴格來說，Dataset 是半結構化的資料格式，搭配 SparkSQL 優化引擎，並保留了 RDD 的優點。
> * A Dataset is a strongly typed collection of domain-specific objects that can be transformed in parallel using functional or relational operations.

## DataFrame :

> * DataFrame 其實就是 Dataset\[Row]，在概念上相當於 table ，有 Schema、有column、有 raw。我們可以對 row 做處理，也可以已 Column 為單位做處理。
> * 我們可以透過讀取結構化的資料去產生 DataFrame，也可以讀取資料庫的 table 去產生 DataFrame。

## DataFrame Operations :

> * **SQL language :** 透過 `df.CreateTempView('view_name')` 的方法去註冊一張表 table，再透過 SparkSession 的 sql() 方法去下 SQL 指令。
> * **Transformations、Actions method :** Dataset 本身保留了 具備 RDD 的特性，同時也有 Transformation 跟 Action 的方法，而這些方法使用起來亦如同 SQL 語法。 例如 : select、filter(where)、groupBy、orderBy、join、map ...etc。
>
> 上面提到過，對 DataFrame，我們可以針對 Column 做處理，我們可以針對 class Column 建立的物件去做處理，亦可以透過一些 Dataset 的基本 函式。
>
> * **Functions :** aggregation、math、string、date、collection ...etc。其中的 aggregate function 可以搭配 groupBy() 使用，諸如 sum、count、collect\_list。

＊**方法非常的多，有興趣可以直接上官方文件看，若是用 pyspark 也可以直接到下面連結去找。**

[http://spark.apache.org/docs/2.2.1/api/python/pyspark.sql.html#pyspark.sql.functions.collect\_list](http://spark.apache.org/docs/2.1.0/api/python/pyspark.sql.html#pyspark.sql.functions.collect_list)
