2016-11-24 46 views
0

我是Scala和Spark的新手,尝试在Spark中创建一个类似于RDD的RDD,为每条线分配一个Int作为键并求和+1。如何在Spark中正确求和.map函数中的整数?

val mapUrls = urls.map{ 
var cont = 0 
x => 
cont += 1 
(cont,x) 
} 

问题是,在某种程度上,cont变量会在一定时间后回到1。

我在做什么错了?

回答

4

这是你想要的吗?

urls.zipWithIndex.map(_.swap) 

您的代码无法正常工作。请记住,Spark是分布式框架,并且没有共享内存。每项任务都会更新自己的cont

+0

谢谢你,这正是我想要的。 我发现日常需求有很多功能。 但只是为了学习的目的,还有另一种解决方法? – gsjunior86

+0

不是通过修改闭包中的变量。你检查'zipWithIndex'源代码来理解如何实现。 – 2016-11-25 09:08:41

相关问题