接觸 Spark 的時候容易產生這樣的疑惑,RDD 是什麼,SparkContext 是什麼,SparkSession 又是什麼... 它們之間又是什麼關係?html
先來個簡單的一圖流:git
再來個粗暴的一句話描述:
Application:用戶編寫的Spark應用程序,Driver 即運行上述 Application 的 main() 函數而且建立 SparkContext。
SparkContext:整個應用的上下文,控制應用的生命週期。
RDD:不可變的數據集合,可由 SparkContext 建立,是 Spark 的基本計算單元。github
能夠由上節圖中看出,Application、SparkSession、SparkContext、RDD之間具備包含關係,而且前三者是1對1的關係。sql
SparkSession 是 Spark 2.0 版本引入的新入口,在這以前,建立一個 Application 對應的上下文是這樣的:apache
//set up the spark configuration and create contexts val sparkConf = new SparkConf().setAppName("SparkSessionZipsExample").setMaster("local") // your handle to SparkContext to access other context like SQLContext val sc = new SparkContext(sparkConf).set("spark.some.config.option", "some-value") val sqlContext = new org.apache.spark.sql.SQLContext(sc)
如今 SparkConf、SparkContext 和 SQLContext 都已經被封裝在 SparkSession 當中,而且能夠經過 builder 的方式建立:api
// Create a SparkSession. No need to create SparkContext // You automatically get it as part of the SparkSession val warehouseLocation = "file:${system:user.dir}/spark-warehouse" val spark = SparkSession .builder() .appName("SparkSessionZipsExample") .config("spark.sql.warehouse.dir", warehouseLocation) .enableHiveSupport() .getOrCreate()
經過 SparkSession 建立並操做 Dataset 和 DataFrame,代碼中的 spark
對象既是 SparkSessionsession
//create a Dataset using spark.range starting from 5 to 100, with increments of 5 val numDS = spark.range(5, 100, 5) // reverse the order and display first 5 items numDS.orderBy(desc("id")).show(5) //compute descriptive stats and display them numDs.describe().show() // create a DataFrame using spark.createDataFrame from a List or Seq val langPercentDF = spark.createDataFrame(List(("Scala", 35), ("Python", 30), ("R", 15), ("Java", 20))) //rename the columns val lpDF = langPercentDF.withColumnRenamed("_1", "language").withColumnRenamed("_2", "percent") //order the DataFrame in descending order of percentage lpDF.orderBy(desc("percent")).show(false)
上面提到了 Dataset 和 DataFrame,這二者概念是 RDD 的演化版本,圖表說明了它們的演進過程和主要區別:app
另外 Spark 的設計自己並不支持跨應用共享RDD,想要共享數據可採起如下3種方式:ide
相關文章:
https://databricks.com/blog/2...
http://www.jianshu.com/p/552b...
https://spark.apache.org/docs...
https://spark.apache.org/docs...
https://apacheignite-fs.readm...
http://www.jianshu.com/p/c018...
https://stackoverflow.com/que...
https://juejin.im/entry/58591...
https://github.com/AgilData/s...