如何使用Apache Spark 2.0
Spark 2.0中使用DataFrames和SQL的第一步
Spark 2.0開發的一個動機是讓它可以觸及更廣泛的受眾,特別是缺乏編程技能但可能非常熟悉SQL的數據分析師或業務分析師。因此,Spark 2.0現在比以往更易使用。在這部分,我將介紹如何使用Apache Spark 2.0。并將重點關注DataFrames作為新Dataset API的無類型版本。
到Spark 1.3,彈性分布式數據集(Resilient Distributed Dataset,RDD)一直是Spark中的主要抽象。RDD API是在Scala集合框架之后建模的,因此間接提供了Hadoop Map / Reduce熟悉的編程原語以及函數式編程(Map、Filter、Reduce)的常用編程原語。雖然RDD API比Map / Reduce范例更具表達性,但表達復雜查詢仍然很繁瑣,特別是對于來自典型數據分析背景的用戶,他們可能熟悉SQL,或來自R/Python編程語言的數據框架。
Spark 1.3引入了DataFrames作為RDD頂部的一個新抽象。DataFrame是具有命名列的行集合,在R和Python相應包之后建模。
Spark 1.6看到了Dataset類作為DataFrame的類型化版本而引入。在Spark 2.0中,DataFrames實際上是Datasets的特殊版本,我們有type DataFrame = Dataset [Row],因此DataFrame和Dataset API是統一的。
表面上,DataFrame就像SQL表。Spark 2.0將這種關系提升到一個新水平:我們可以使用SQL來修改和查詢DataSets和DataFrames。通過限制表達數量,有助于更好地優化。數據集也與Catalyst優化器良好集成,大大提高了Spark代碼的執行速度。因此,新的開發應該利用DataFrames。
在本文中,我將重點介紹Spark 2.0中DataFrames的基本用法。我將嘗試強調Dataset API和SQL間的相似性,以及如何使用SQL和Dataset API互換地查詢數據。借由整個代碼生成和Catalyst優化器,兩個版本將編譯相同高效的代碼。
代碼示例以Scala編程語言給出。我認為這樣的代碼最清晰,因為Spark本身就是用Scala編寫的。
?SparkSession
SparkSession類替換了Apache Spark 2.0中的SparkContext和SQLContext,并為Spark集群提供了唯一的入口點。
為了向后兼容,SparkSession對象包含SparkContext和SQLContext對象,見下文。當我們使用交互式Spark shell時,為我們創建一個名為spark的SparkSession對象。
?創建DataFrames
DataFrame是具有命名列的表。最簡單的DataFrame是使用SparkSession的range方法來創建:
使用show給我們一個DataFrame的表格表示,可以使用describe來獲得數值屬性概述。describe返回一個DataFrame:
?
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%