Scala java.lang.NoSuchElementException 错误
Scala java.lang.NoSuchElementException Error
我有一个 Scala for 循环,它是这样的:
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)的 "to" 运算符在这里是一个问题,因为它包含从 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 上做这样的事情.
我有一个 Scala for 循环,它是这样的:
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)的 "to" 运算符在这里是一个问题,因为它包含从 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 上做这样的事情.