天天看點

Spark基礎知識

[譯]Spark基礎知識

本文章譯自http://spark.apache.org/docs/latest/sql-programming-guide.html#overview

Overview

Spark SQL是Spark中的一個子產品,為了進行結構化資料處理。不像Spark中其他的RDD的API,

由SparkSQL提供的接口,為Spark提供了更多關于正在執行的計算和資料的結構的資訊。内在的,SparkSQL使用附加的資訊去執行額外的優化。有數種方式可以和SparkSQL互動,包括SQL和DataSet ApI兩種方法。當計算一個結果時,相同的執行程序被使用。獨立于你即将表達計算的API或者語言。這種統一的方式意味着開發者可以容易的來回切換不同的API,提供最自然方式去表示一個給出的轉換操作。

SQL

當從另外一種程式設計語言中運作Sql語句時,結果将會以DataSet/DataFrame傳回

DataSet and DataFrames

一個DataSet就是一個分布式的資料,DataSet是在Spark 1.6之後新加的一個接口,這個接口繼承了RDDS的優勢(strong typing,強大的lambda函數表達式功能)并且具有Spark SQL優化執行引擎的優勢。一個DataSet能夠從JVM對象中構造得到,并且可以使用函數的轉換操作(map,flatMap,filter)。DataSet API在scala和java中均可用。Python和R暫時不支援這個DataSet。

一個DataFrame是一個由指定列組成的DataSet。在概念上,它和關系型資料庫相同或者在R/Python中的資料架構(data frame)相同,但是在引擎方面具有更加豐富的優化性能。DataFrame的結構化有着廣泛的來源,諸如:hive中結構化的資料檔案,表。外部的資料庫或者是已存在的RDDs。DataFrame API在Scala和Java,Python,R語言中均可使用。在Scala和java中,一個DataFrame代表的是行的DataSet。在Scala API中,DataFrame僅僅是DataSet[Row]的類型代名詞。

然而,在java API中,使用者需要使用DataSet去表示DataFrame

繼續閱讀