我已經創建了兩個來自Hive表(PC_ITM和ITEM_SELL)並且大小很大的數據幀,並且我經常在SQL查詢中使用那些 通過註冊爲表。但由於那些大,因此我花了很多時間獲取查詢結果。因此,我將它們保存爲parquet文件,然後將它們讀取並註冊爲臨時表。但仍然得不到良好性能,因此我已廣播了這些數據幀,然後註冊了它們如下表所示。如何訪問Spark中的廣播數據幀
PC_ITM_DF=sqlContext.parquetFile("path")
val PC_ITM_BC=sc.broadcast(PC_ITM_DF)
val PC_ITM_DF1=PC_ITM_BC
PC_ITM_DF1.registerAsTempTable("PC_ITM")
ITM_SELL_DF=sqlContext.parquetFile("path")
val ITM_SELL_BC=sc.broadcast(ITM_SELL_DF)
val ITM_SELL_DF1=ITM_SELL_BC.value
ITM_SELL_DF1.registerAsTempTable(ITM_SELL)
sqlContext.sql("JOIN Query").show
但是我還是無法實現它與這些數據幀未被廣播的時間相同的性能。
誰能告訴如果這是廣播和使用它的正確方法?`
這不回答原來的問題,這就是如何廣播數據幀。如果您不止一次加載它,即重複使用,堅持只會有所幫助。加入兩個分佈式數據集時無助於此。 –
@KirkBroadhurst他指出數據很大並且經常使用 –
@AlexNaspo稍微偏離原始問題:'RDD適合內存',因此這意味着我無法播放數據,直到我可以將其收集到驅動程序的主內存中?我通常使用自己的筆記本電腦作爲大型集羣上的驅動程序和主設備/從設備。那麼這是我很快可能面臨的限制嗎? –