我有一段像这样的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]