天天看點

Spark修煉之道(進階篇)——Spark源碼閱讀:第十三節 Spark SQL之SQLContext(一)

作者:周志湖

sqlcontext是spark sql進行結構化資料處理的入口,可以通過它進行dataframe的建立及sql的執行,其建立方式如下:

其對應的源碼為:

其調用的是私有的主構造函數:

當spark.sql.allowmultiplecontexts設定為true時,則允許建立多個sqlcontexts/hivecontexts,建立方法為newsession

其isrootcontext 被設定為false,否則會抛出異常,因為root sqlcontext隻能有一個,其它sqlcontext與root sqlcontext共享sparkcontext, cachemanager, sqllistener。如果spark.sql.allowmultiplecontexts為false,則隻允許一個sqlcontext存在

catalog用于登出表、登出表、判斷表是否存在等,例如當dataframe調用registertemptable 方法時

會sqlcontext的registerdataframeastable方法

sqlcontext.registerdataframeastable實質上調用的就是catalog的registertable 方法:

simplecatalog整體源碼如下:

sqlparser在sqlcontext的定義:

sparksqlparser為頂級的spark sql解析器,對spark sql支援的sql文法進行解析,其定義如下:

fallback函數用于解析其它非spark sql dialect的文法。

spark sql dialect支援的關鍵字包括:

用于解析ddl(data definition language 資料定義語言)

其支援的關鍵字有:

主要做三件事,分别是建立表、描述表和更新表

createtable方法具有如下(具體功能參考注釋說明):

describetable及refreshtable代碼如下:

繼續閱讀