作者:周志湖
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代碼如下: