以下情况产生相同的结果。...
方案1(广播参考数据)
val refData = sc.broadcast(Map(1 -> "one", 2 -> "two", 3 -> "three"))
val rdd = sc.parallelize(Seq("a", "abc", "ab"))
def countCharsWithBroadcast(rddOfStrings: RDD[String], numbersRefData: Broadcast[Map[Int, String]]) =
rddOfStrings.map(str => numbersRefData.value(str.length)).collect()
val result = countCharsWithBroadcast(rdd, refData)
方案2(无广播)-即使在群集环境中也可以正常工作
val refData = Map(1 -> "one", 2 -> "two", 3 -> "three")
val rdd = sc.parallelize(Seq("a", "abc", "ab"))
def countChars( rddOfStrings: RDD[String], numbersRefData: Map[Int, String]) =
rddOfStrings.map(str => numbersRefData(str.length)).collect()
val result = countChars(rdd, refData)
在第二种情况下,参考数据仍然被序列化并且可以正常工作。为什么在这种情况下应该使用广播功能?