2017-08-26 49 views
1

我有被註冊爲tempView一個數據幀和蜂巢表加入pySpark怎麼做TempView表連接蜂巢表

df1.createOrReplaceTempView("mydata") 

    df2 = spark.sql("Select md.column1,md.column2,mht.column1 \ 
        from mydata md inner join myHivetable mht on mht.key1 = md.key1 \ 
        where mht.transdate between '2017-08-01' and '2017-08-10' ") 

這是如何發生的聯接。如果Hive表中的數據量非常大,將會嘗試將hive表讀入內存或決定將tempView表寫入配置單元。

添加以下其他詳細信息,第一個答案後:

比方說,我們有

100行作爲tempView在星火稱爲TABLE_A。

Hive TABLE_B中的10億行表。

下一步我們需要將TABLE_A和TABLE_B結合起來。

TABLE_B上有一個日期範圍條件。

由於表TABLE_B的大小很大。將會將整個表TABLE_B讀入內存或決定將TABLE_A寫入Hadoop中的臨時空間以執行Hive Join或者它將如何智能地計算出執行連接以獲得高性能的最佳方式

回答

1

Hive上下文存儲信息在Metastore中註冊臨時表/視圖。這樣就可以在數據上執行類似於SQL的查詢操作 - 而且我們仍然可以獲得與其他情況相同的性能。

一些這方面的更多信息,可以閱讀herehere

+0

是的,這是正確的。假設我們在Spark中有100行爲tempView,名爲TABLE_A。我在Hive TABLE_B中有一個10億行的表。作爲下一步,我們需要加入這些2. TABLE_B上有一個日期範圍條件。由於表TABLE_B的大小很大。 Spark會將整個表TABLE_B讀入內存中,或者決定將TABLE_A寫入Hadoop中的臨時空間以執行Hive Join,或者如何智能地找出最佳方式來執行連接以提高性能 – Nav

+0

Spark在管理這種大量數據方面非常聰明數據的。如果它有十億行,你可能需要足夠的配置(至少8GB執行器內存),它不會將所有內容都加載到單個節點的內存中 – karthikr