将函数与广播参数相比使用非广播参数有什么好处

时间:2018-10-28 17:52:43

标签: apache-spark apache-spark-2.0

以下情况产生相同的结果。...

方案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)

在第二种情况下,参考数据仍然被序列化并且可以正常工作。为什么在这种情况下应该使用广播功能?

0 个答案:

没有答案