val counts = parsed.mapPartitions(iter => {
iter.flatMap(point => {
println("points"+point)
point.indices.map(i => i,point(i)))
})
}).countByValue()
val count = parsed.mapPartitions(iter => {
iter.flatMap(point => {
println("pointsssss" + point.deep)
point.indices.map(i => (i, point(i)))
})
}).countByValue()
当我执行count.foreach(println)
时,我也会从counts
获得输出。我该如何避免这个问题?
答案 0 :(得分:0)
您看到两个打印语句的原因是countByValue
本身是一个操作而不是转换,它会触发RDD的评估(在这种情况下,它们都是)。来自文档:
def countByValue():Map [T,Long]
将此RDD中每个唯一值的计数作为(值,计数)对的映射返回。最后的组合步骤在主服务器上本地发生,相当于运行单个减少任务。
您的下一个代码count.foreach(println)
因此在主节点中的正常Scala集合中的Spark之外发生。
检查逻辑是否这不是你想要的行为,我怀疑你想要countByKey()
(也是一个动作)。