廣播雜湊加入 Spark

廣播連線將小資料複製到工作節點,從而實現高效且超快的連線。當我們連線兩個資料集並且其中一個資料集比另一個小得多時(例如,當小資料集可以適合記憶體時),那麼我們應該使用廣播雜湊連線。

以下影象顯示廣播雜湊加入,即將小資料集廣播到大資料集的每個分割槽。

https://i.stack.imgur.com/wOo4T.jpg

以下是程式碼示例,如果你有類似的大型和小型資料集連線方案,則可以輕鬆實現該程式碼示例。

case class SmallData(col1: String, col2:String, col3:String, col4:Int, col5:Int)
 
val small = sc.textFile("/datasource")
 
val df1 = sm_data.map(_.split("\\|")).map(attr => SmallData(attr(0).toString, attr(1).toString, attr(2).toString, attr(3).toInt, attr(4).toInt)).toDF()
 
val lg_data = sc.textFile("/datasource")
 
case class LargeData(col1: Int, col2: String, col3: Int)
 
val LargeDataFrame = lg_data.map(_.split("\\|")).map(attr => LargeData(attr(0).toInt, attr(2).toString, attr(3).toInt)).toDF()
 
 
val joinDF = LargeDataFrame.join(broadcast(smallDataFrame), "key")