从广播地图中获取价值需要花费大量时间

时间:2019-11-21 12:06:27

标签: scala apache-spark

我有三个节点Spark集群。我正在准备一张地图并广播地图,以便每个节点都可以使用它。但是从广播地图中获取数据需要花费大量时间。 广播地图有140万条记录。

我正在以这种方式广播地图:

 val  SDF3_boradcast = spark.sparkContext.broadcast(SDF3.collectAsList.toMap)

并以此方式获得价值:

val sd_studentTemp = SDF3_boradcast.value.get(key).get

为什么要花很多时间,还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我没有直接回答您的问题,但我怀疑是这种情况,因为广播变量通常很小,应该适合执行程序的内存。 当地图很小时,通常使用地图侧连接(在其中广播地图)。 来自this blog about map-side joins

的引用
  

地图端连接的缺点:       仅当在其中执行映射侧连接操作的表之一足够小以适合内存时,映射侧连接才足够。因此,不适合在两个表中都有大量数据的表上执行地图端连接。

如果地图的大小与您指示的一样大,请考虑从该地图中制作一个新的数据框,然后对数据框进行常规联接。