0
我是Scala和Spark的新手,尝试在Spark中创建一个类似于RDD的RDD,为每条线分配一个Int作为键并求和+1。如何在Spark中正确求和.map函数中的整数?
val mapUrls = urls.map{
var cont = 0
x =>
cont += 1
(cont,x)
}
问题是,在某种程度上,cont变量会在一定时间后回到1。
我在做什么错了?
我是Scala和Spark的新手,尝试在Spark中创建一个类似于RDD的RDD,为每条线分配一个Int作为键并求和+1。如何在Spark中正确求和.map函数中的整数?
val mapUrls = urls.map{
var cont = 0
x =>
cont += 1
(cont,x)
}
问题是,在某种程度上,cont变量会在一定时间后回到1。
我在做什么错了?
这是你想要的吗?
urls.zipWithIndex.map(_.swap)
您的代码无法正常工作。请记住,Spark是分布式框架,并且没有共享内存。每项任务都会更新自己的cont
。
谢谢你,这正是我想要的。 我发现日常需求有很多功能。 但只是为了学习的目的,还有另一种解决方法? – gsjunior86
不是通过修改闭包中的变量。你检查'zipWithIndex'源代码来理解如何实现。 – 2016-11-25 09:08:41