Spark SQL、資料框架和資料集指南

Spark SQL 是一個 Spark 模組,用於結構化資料處理。與基本的 Spark RDD API 不同,Spark SQL 提供的介面會提供 Spark 更多關於資料結構和執行運算的資訊。在內部,Spark SQL 會使用這些額外資訊來執行額外的最佳化。有許多方法可以與 Spark SQL 互動,包括 SQL 和 Dataset API。在計算結果時,會使用相同的執行引擎,而與你用來表達運算的 API/語言無關。這種統一表示開發人員可以輕鬆地在不同的 API 之間切換,具體取決於提供哪種最自然的方式來表達給定的轉換。

此頁面上的所有範例都使用 Spark 發行版中包含的範例資料,可以在 spark-shellpyspark shell 或 sparkR shell 中執行。

SQL

Spark SQL 的一種用途是執行 SQL 查詢。Spark SQL 也可用於從現有的 Hive 安裝中讀取資料。如需瞭解如何設定此功能的詳細資訊,請參閱 Hive Tables 區段。從其他程式語言內執行 SQL 時,結果將會以 Dataset/DataFrame 的形式傳回。你也可以使用 命令列 或透過 JDBC/ODBC 與 SQL 介面互動。

Datasets 和 DataFrames

Dataset 是資料的分布式集合。Dataset 是 Spark 1.6 中新增的介面,它結合了 RDD 的優點(強類型、能夠使用強大的 lambda 函數)和 Spark SQL 最佳化執行引擎的優點。Dataset 可以從 JVM 物件 建構,然後使用函數轉換(mapflatMapfilter 等)來處理。Dataset API 可在 ScalaJava 中使用。Python 不支援 Dataset API。但是,由於 Python 的動態特性,Dataset API 的許多優點已經可以使用(即你可以自然地按名稱存取列的欄位 row.columnName)。R 的情況類似。

資料框是依命名欄位組織的資料集。它在概念上等同於關聯式資料庫中的表格或 R/Python 中的資料框,但內部有更豐富的最佳化。資料框可由各種來源建構,例如:結構化資料檔案、Hive 中的表格、外部資料庫或現有的 RDD。資料框 API 可在 Scala、Java、PythonR中使用。在 Scala 和 Java 中,資料框由Row的資料集表示。在Scala API中,DataFrame只是Dataset[Row]的類型別名。而在Java API中,使用者需要使用Dataset<Row>來表示DataFrame

在本文檔中,我們通常會將Row的 Scala/Java 資料集稱為資料框。