2017-09-14 49 views
1

我想了解火花hiveContext。 當我們寫hiveContextSpark HiveContext:Spark Engine或Hive引擎?

sqlContext=new HiveContext(sc) 
sqlContext.sql("select * from TableA inner join TableB on (a=b) ") 

是使用星火引擎或蜂房引擎它使用查詢?我相信上面的查詢是通過Spark Engine執行的。但是,如果這就是爲什麼我們需要數據框?

我們可以盲目地複製sqlContext.sql("")中的所有配置單元查詢,並且在不使用數據框的情況下運行。

通過DataFrames,我的意思是這樣的TableA.join(TableB, a === b) 我們甚至可以使用SQL命令執行聚合。請問任何人請澄清這個概念?如果使用數據框連接有什麼好處,而不是sqlContext.sql()加入? 連接只是一個例子。 :)

+1

SQL是一種查詢語言,必須由查詢處理器編譯。 Dataframe API是一種(一種)查詢語言,對於人類來說,讀/寫更加複雜,但查詢處理器更容易。 –

+1

請注意,由於Scala中的Lambda表達式使用大量樣板轉換和控件(參見Spark Summit最近的演示文稿)來實現,因此某些表達式在SQL中編寫時會更快。 –

+1

還要注意,當寫入Hive表時,SQL INSERT將確保文件格式嚴格遵守Hive結構,否則情況並非總是如此。 –

回答

2

Spark HiveContext使用下面的Spark執行引擎,請參閱spark code

spark中的解析器支持是可插入的,HiveContext使用spark的HiveQuery解析器。

在功能上,你可以用sql做所有事情,不需要數據幀。但是數據框提供了一種實現相同結果的便捷方式。用戶不需要編寫SQL語句。

+0

因此,總之,我可以說「功能和性能明智」,如果我使用「SQL」或「dataFrame」和它的用戶便利性沒有區別?和「SQL」必須通過查詢解析器和「數據框」不必? –

+0

@rohan nayak右 –

+0

非常感謝您的澄清 –