2014-11-21 41 views
-1

我對Spark和scala編程相對較新。錯誤:value saveAsTextFile不是單元的成員

我正在嘗試使用scala執行簡單的pagerank算法。但編譯時遇到此錯誤。

error: value saveAsTextFile is not a member of Unit 

我附上了我正在使用的代碼。

val output = ranks.collect() 
output.foreach(tup => println(tup._1 + " has page rank: " + tup._2)).saveAsTextFile("/user/ssimhadr/ScalaWordCount_Output") 
+0

這是程序結構的問題,可能與包含此表達式的函數有關 - 所提供的代碼不足以說明問題出在哪裏。 – maasg 2014-11-21 20:06:56

+1

你想做什麼? 'foreach'純粹是爲了副作用(這就是你用'println'做的事情)。 – Ryan 2014-11-21 20:57:19

回答

0

正如Ryan指出的那樣,foreach就是爲了副作用。它返回單位而不是列表本身。人類沒有鏈接。

現在,你實際上是在做什麼如下:

val output = ranks.collect() 
val realoutput: Unit = output.foreach(tup => println(tup._1 + " has page rank: " + tup._2)) 
realoutput.saveAsTextFile(...) 

saveAsTextFile不是Unit一員,你會得到你的錯誤信息

你應該做的事:

ranks.foreach(tup => println(tup._1 + " has page rank: " + tup._2)) 
ranks.saveAsTextFile(...) 

ranks.saveAsTextFile(...) 
ranks.collect().foreach(tup => println(tup._1 + " has page rank: " + tup._2)) 
+0

'ranks.collect'將返回一個沒有'saveAsTextFile'方法的值數組。在這種情況下使用收集是不必要的。 – maasg 2014-11-22 09:37:58

+0

正確,完全忽略了這一點。將相應地更新帖子 – elmalto 2014-11-22 22:30:27

相關問題