【问题标题】:broadcast variable fails to take all data广播变量无法获取所有数据
【发布时间】:2015-09-21 09:23:06
【问题描述】:

使用 collectasmap() 应用广播变量时​​,并非所有值都包含在广播变量中。例如

    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 的数据都出现了。我错过了什么?

提前致谢。

【问题讨论】:

    标签: apache-spark broadcast


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答尼曼德。 collect() 获取所有数据。但是我不能像 collectAsMap() 那样轻松地使用它。当使用 collectAsMap() 我可以像这样使用它: val rdd1Broadcast = sc.broadcast(rdd1.collectAsMap()) val joined = rdd2.mapPartitions({ iter => val m = rdd1Broadcast.value for { ((t, w), u)
    猜你喜欢
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    相关资源
    最近更新 更多