Spark SQL、資料框架和資料集指南
Spark SQL 是一個 Spark 模組,用於結構化資料處理。與基本的 Spark RDD API 不同,Spark SQL 提供的介面會提供 Spark 更多關於資料結構和執行運算的資訊。在內部,Spark SQL 會使用這些額外資訊來執行額外的最佳化。有許多方法可以與 Spark SQL 互動,包括 SQL 和 Dataset API。在計算結果時,會使用相同的執行引擎,而與你用來表達運算的 API/語言無關。這種統一表示開發人員可以輕鬆地在不同的 API 之間切換,具體取決於提供哪種最自然的方式來表達給定的轉換。
此頁面上的所有範例都使用 Spark 發行版中包含的範例資料,可以在 spark-shell
、pyspark
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 物件 建構,然後使用函數轉換(map
、flatMap
、filter
等)來處理。Dataset API 可在 Scala 和 Java 中使用。Python 不支援 Dataset API。但是,由於 Python 的動態特性,Dataset API 的許多優點已經可以使用(即你可以自然地按名稱存取列的欄位 row.columnName
)。R 的情況類似。
資料框是依命名欄位組織的資料集。它在概念上等同於關聯式資料庫中的表格或 R/Python 中的資料框,但內部有更豐富的最佳化。資料框可由各種來源建構,例如:結構化資料檔案、Hive 中的表格、外部資料庫或現有的 RDD。資料框 API 可在 Scala、Java、Python和R中使用。在 Scala 和 Java 中,資料框由Row
的資料集表示。在Scala API中,DataFrame
只是Dataset[Row]
的類型別名。而在Java API中,使用者需要使用Dataset<Row>
來表示DataFrame
。
在本文檔中,我們通常會將Row
的 Scala/Java 資料集稱為資料框。