[英]Optimize Hive table loading time in spark
我正在開發一個火花流項目,其中傳入流與多個Hive表連接。 所以我在spark中加載表並緩存它。
以下是給定的示例查詢 -
val df = sql("select * from (select *, row_number() over (partition by a , b , c, d order by date desc) row_num from test) tmp where tmp.row_num = 1")
該表有99%的重復數據,所以我使用行號邏輯來區分。 當我做df.explain(true)
,下推沒有條件。 所以整個表加載到內存中。 該表有數十億的數據。 這給出了FAILED_TO_UNCOMPRESS(5)
錯誤。
我應該使用上面的查詢創建Hive視圖並在spark中調用視圖,以便獲取結果數據。 我不知道它是否有效。
大約有10張桌子每15分鍾加載一次火花。 所有都具有相同的行號邏輯。 如何啟用下推? 所以spark只能從Hive中獲取結果數據。
您是否嘗試過使用MAX功能而不是ROW_NUM ? 使用ROW_NUM可能是個問題。 我會使用以下查詢:
val df = sql("select *, MAX(date) over (partition by a , b , c, d) from test")
有關詳細信息,請參閱MAX函數定義 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.