spark scala throws java.util.NoSuchElementException:key not found:0 exception

我有一段像这样的spark
scala代码:

val conf = new SparkConf().setAppName("MatrixInversion").setMaster("local")

val sc = new SparkContext(conf)

  def main (args: Array[String]) {

    var array:Array[Array[Double]]=new Array(2)
    for(i<- 0 until 2)
      array(i)=new Array(2)

    array(0)(0)=1
    array(0)(1)=2
    array(1)(0)=3
    array(1)(1)=4

    sc.makeRDD(array).cache()

    //val matrixA3=sc.textFile("A3")
    testCache()

    sc.stop()

  }

  def testCache():Unit={

    val rdds=sc.getPersistentRDDs
    val cacheArray=rdds(0).asInstanceOf[RDD[Array[Double]]]
    println("print cachaArray")
    cacheArray.collect()
    val cacheLength=cacheArray.collect().length
    println("length"+cacheLength)
  }

现在好了.但是当我取消注释这一行时:val matrixA3 = sc.textFile(“A3”)

它有这样的错误:

Exception in thread "main" java.util.NoSuchElementException: key not found: 0
    at scala.collection.MapLike$class.default(MapLike.scala:228)
    at scala.collection.AbstractMap.default(Map.scala:58)
    at scala.collection.MapLike$class.apply(MapLike.scala:141)
    at scala.collection.AbstractMap.apply(Map.scala:58)
    at com.scala.inversion.test$.testCache(test.scala:117)

为什么?

最佳答案 你的代码实际上是错的.

看到这条线

val cacheArray=rdds(0).asInstanceOf[RDD[Array[Double]]]

rdds这里,它的类型是scala.collection.Map [Int,org.apache.spark.rdd.RDD [_]].

但是,键(Int)并不总是一个常量. (你可以缓存其他事情).对于您的代码,在地图中找不到key == 0.

例如,我已经在我的计算机上测试了你的代码,rdds是

Map(9 -> ParallelCollectionRDD[9]
点赞