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