Scala代码与java.util.NoSuchElementException崩溃:接下来是空迭代器

时间:2015-02-02 09:06:04

标签: scala apache-spark

我的代码崩溃了java.util.NoSuchElementException:接下来是空迭代器异常。

def myfunction(arr : Array[(Int,(String,Int))]) = {
val values = (arr.sortBy(x => (-x._2._2, x._2._1.head)).toList)
...........................

代码在我试图对数组进行排序的第一行崩溃。

var arr = Array((1,("kk",1)),(1,("hh",1)),(1,("jj",3)),(1,("pp",3)))

我试图在内部元组的第二个元素的基础上对数组进行排序。如果存在相等,则应在内元组的第一个元素上进行排序。

输出 - ((1,(" pp",3)),(1,(" jj",3)),(1,(" hh&# 34;,1)),(1,(" KK",1)))

在某些情况下崩溃(通常它工作正常),我猜这是由于空数组。

如何摆脱这种崩溃或任何其他优雅的方法来实现相同的结果。

3 个答案:

答案 0 :(得分:9)

这是因为您的某个数组项(Int,(String,Int))包含空字符串。

"".head

导致

  

java.util.NoSuchElementException:下一个空迭代器

使用x._2._1.headOption

答案 1 :(得分:3)

val values = (arr.sortBy(x => (-x._2._2, x._2._1)).toList)

从语句中删除头部。由于arr

中的空字符串,这会崩溃
var arr = Array((1,("kk",1)),(1,("hh",1)),(1,("jj",3)),(1,("pp",3)),(1,("",1)))

答案 2 :(得分:1)

我在spark中使用MLlib并得到此错误,事实证明我预测不存在的userID或itemID,ALS将生成预测矩阵(userIDs * itemIDs),您必须确保包含您的请求在这个矩阵中。