1. 程式人生 > >瞭解Spark SQL,DataFrame和資料集

瞭解Spark SQL,DataFrame和資料集

關於Datasets和DataFrame API存在很多混淆,因此在本文中,我們將瞭解Spark SQL,DataFrames和Datasets。

Spark SQL

它是一個用於結構化資料處理的Spark模組,它允許您編寫更少的程式碼來完成工作,並且在底層,它可以智慧地執行優化。Spark SQL模組由兩個主要部分組成。我們將僅討論本文的第一部分,它是結構API的表示,稱為DataFrames和Datasets,它們定義了用於處理結構化資料的高階API。

Spark SQL模組的一個很酷的功能是能夠執行SQL查詢來執行資料處理,查詢的結果將作為資料集或資料框返回。Spark SQL模組可以輕鬆讀取資料並從以下任何格式寫入資料; CSV,XML和JSON以及二進位制資料的常見格式是Avro,Parquet和ORC。

DataFrames

資料框是一個分散式的資料集合,它按行組織,每行包含一組列,每列都有一個名稱和一個關聯的型別。換句話說,這個分​​布式資料集合具有由模式定義的結構。您可以將它視為關係資料庫中的表,但在引擎蓋下,它具有更豐富的優化。

與RDD一樣,DataFrame提供兩種型別的操作:轉換和操作

對轉換進行了延遲評估,並且熱切地評估了操作。

建立DataFrame

有幾種方法可以建立DataFrame; 其中一個常見的事情是需要隱式或顯式地提供模式。

以下程式碼將完全使用Spark 2.x和Scala 2.11

從RDD建立DataFrame

val  rdd  =  sc。並行化(1 
10)。map(x =>(x,x * x))
val  dataframe  =  spark。createDataFrame(rdd)。toDF(“key”“sqaure”
資料幀。show()
//輸出:
+ --- + ----- +
| 關鍵| 價值|
+ --- + ----- +
|   1 |     1 |
|   2 |     4 |
|   3 |     9 |
|   4 |    16 |
|   5 |    25 |
|   6 |    36 |
|   7 |    49 |
|   8 |    64 |
|   9 |    81 |
|  10 |   100 |
+ --- + ----- +

資料集

資料集是一種強型別,不可變的資料集合。與DataFrame類似,資料集中的資料對映到定義的模式。它更多的是關於型別安全性並且是面向物件的。

DataFrame和資料集之間存在一些重要差異。

  • 資料集中的每一行都由使用者定義的物件表示,以便您可以將單個列稱為該物件的成員變數。這為您提供了編譯型別的安全性。
  • 資料集具有稱為編碼器的幫助器,它是智慧且高效的編碼實用程式,可將每個使用者定義物件內的資料轉換為緊湊的二進位制格式。如果資料集快取在記憶體中,以及在混洗過程中Spark需要通過網路傳輸的位元組數減少,這可以減少記憶體使用量。

建立資料集

有幾種方法可以建立資料集:

  • 第一種方法是使用DataFrame類的as(Symbol)函式將DataFrame轉換為資料集。
  • 第二種方法是使用SparkSession.createDataset()函式從本地物件集合建立資料集。
  • 第三種方法是使用toDS隱式轉換實用程式。

讓我們看看建立資料集的不同方法

//使用SparkSession.createDataset()和toDS建立資料集 
val  movies  =  Seq(電影(“DDLJ”“Awesome”2018L),   電影(“ADHM”“Nice”2018L))
val  moviesDS  =  spark。createDataset(localMovies)
電影DS。show()
val  moviesDS1  =  localMovies。toDS()
localMoviesDS1。show()
//為案例類建立編碼器
case  class  Employee(name:String,age:Long
val  caseClassDS  =  Seq(Employee(“Amy”32))。TODS
caseClassDS。show()
//將DataFrame轉換為強型別資料集
案例  電影(ACTOR_NAME:字串,MOVIE_TITLE:字串,produced_year:
val  movies  =  Seq((“Damon,Matt”“The Bourne Ultimatum”2007L),
“達蒙,馬特”“善意狩獵”1997L))
val  moviesDF  =  電影。toDF。作為 [ 電影 ]

感謝您閱讀本文,希望對您有所幫助。