2016-05-01 117 views
-1

我有一個Scala的for循環是這樣的:斯卡拉java.lang.NoSuchElementException錯誤

val a = sc.textFile("path to file containing 8 elements") 
for(i <- 0 to a.count.toInt) 
{ 
    println((a.take(i).last)) 
} 

但它拋出java.lang.NoSuchElementException錯誤。 我無法理解錯在哪裏以及如何解決它?

+0

哪一行會拋出? –

+0

你想做什麼? –

+0

我試圖一個接一個地打印文件中的所有元素。 – user3663737

回答

0

有兩個問題

1)「到」操作者定義的範圍(在0到a.count.toInt)是這裏的問題,因爲它是包括性的範圍從0到8。在集合8元素,它試圖訪問索引8處的元素。

您可以使用0 ,直到 a.count.toInt。

2)第二個問題是調用「last」運算符的方式。當i = 0時,表達式a.take(i)是一個空集合,因此在其上調用「last」會導致NoSuchElementException。

爲什麼要迭代地從一個集合中取出1,2,3,8個元素只是爲了每次都取最後一個元素?

可以用8個元素的集合來做你正在做的事情,但如果你想在更大的RDD上做這件事,你應該考慮緩存RDD,如果你想在更大的RDD上做這樣的事情。

+0

我檢查了,你提到的第二個問題實際上會引發錯誤。 – user3663737

+0

是的,正確調用帶有較大參數的「take」不會導致任何問題。 –