全部產品
Search
文件中心

E-MapReduce:Spark SQL、Dataset和DataFrame基礎操作

更新時間:Jul 01, 2024

本文為您介紹Spark SQL、Dataset和DataFrame相關的概念,以及Spark SQL的基礎操作。

Spark SQL、Dataset和DataFrame介紹

Spark SQL是一個用於結構化資料處理的Spark模組,與基本的Spark RDD的API不同,Spark SQL的介面還提供了更多關於資料和計算的結構化資訊。Spark SQL可以用於執行SQL查詢並從Hive表中讀取資料。

Dataset是資料的分布式集合。Dataset是Spark 1.6中添加的一個新介面,它整合了RDD和Spark SQL的優點,可以從JVM物件建構資料集,然後使用函數轉換(Map、FlatMap或Filter等)進行操作。Dataset API有Scala和Java兩種版本。Python和R不支援Dataset API,但是由於Python和R的動態特性,Dataset API的許多優點已經可用。

DataFrame是組織成命名列的Dataset。他在概念上相當於關聯式資料庫中的一個表,或R和Python中的一個DataFrame,但是進行了更豐富的最佳化。DataFrame可以從一系列廣泛的源構建,例如:結構化資料檔案、Hive中的表、外部資料庫或現有RDD。DataFrame API有Scala、Java、Python和R版本。在Scala和Java中,DataFrame由行資料集表示。在Scala API中,DataFrame只是Dataset[Row]的類型別名,而在Java API中,您需要使用Dataset<Row>來表示資料幀。

Spark SQL基礎操作

Spark SQL支援直接通過SQL語句操作資料,而Spark會將SQL進行解析、最佳化並執行。

以下樣本展示了如何使用Spark SQL進行讀取檔案。樣本如下:

  • 樣本1:Spark支援多種資料格式,本樣本讀取了JSON格式檔案的資料,並輸出為Parquet格式。

    val peopleDF = spark.read.json("examples/src/main/resources/people.json")
    peopleDF.write.parquet("people.parquet")
  • 樣本2:通過SQL從parquetFile表中讀出年齡在13歲到19歲之間的年輕人的名字,並轉化為DataFrame,隨後通過Map操作將名字轉化為一個可讀的形式並輸出。

    val namesDF = spark.sql("SELECT name FROM parquetFile WHERE age BETWEEN 13 AND 19")
    namesDF.map(attributes => "Name: " + attributes(0)).show()