我有一個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錯誤。 我無法理解錯在哪裏以及如何解決它?
我有一個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錯誤。 我無法理解錯在哪裏以及如何解決它?
有兩個問題
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上做這樣的事情。
我檢查了,你提到的第二個問題實際上會引發錯誤。 – user3663737
是的,正確調用帶有較大參數的「take」不會導致任何問題。 –
哪一行會拋出? –
你想做什麼? –
我試圖一個接一個地打印文件中的所有元素。 – user3663737