广播变量无法获取所有数据

时间:2015-09-21 09:23:07

标签: apache-spark broadcast

使用collectasmap()应用广播变量时​​,广播变量并不包含所有值。 e.g。

    val emp = sc.textFile("...text1.txt").map(line => (line.split("\t")(3),line.split("\t")(1))).distinct()
    val emp_new = sc.textFile("...text2.txt").map(line => (line.split("\t")(3),line.split("\t")(1))).distinct()
    emp_new.foreach(println)

    val emp_newBC = sc.broadcast(emp_new.collectAsMap())
    println(emp_newBC.value)

当我检查emp_newBC中的值时,我看到并非所有来自emp_new的数据都出现了。我错过了什么?

提前致谢。

1 个答案:

答案 0 :(得分:1)

问题是emp_new是元组的集合,而emp_newBC是广播的地图。如果要收集地图,则会删除重复的键,因此您的数据较少。如果要返回所有元组的列表,请使用

val emp_newBC = sc.broadcast(emp_new.collect())