广播哈希加入 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")