Thank you, Ankur! :) But how to assign the storage level to a new vertices RDD that mapped from an existing vertices RDD, e.g. *val newVertexRDD = graph.collectNeighborIds(EdgeDirection.Out).map{case(id:VertexId, a:Array[VertexId]) => (id, initialHashMap(a))}*
the new one will be combined with that existing edges RDD(MEMORY_AND_DISK) to construct a new graph. e.g. val newGraph = Graph(newVertexRDD, graph.edges) BTW, the return of newVertexRDD.getStorageLevel is StorageLevel(true, true, false, true, 1), what does it mean? Thanks in advance! Best, Yifan 2014-09-03 22:42 GMT+02:00 Ankur Dave <ankurd...@gmail.com>: > At 2014-09-03 17:58:09 +0200, Yifan LI <iamyifa...@gmail.com> wrote: > > val graph = GraphLoader.edgeListFile(sc, edgesFile, minEdgePartitions = > numPartitions).partitionBy(PartitionStrategy.EdgePartition2D).persist(StorageLevel.MEMORY_AND_DISK) > > > > Error: java.lang.UnsupportedOperationException: Cannot change storage > level > > of an RDD after it was already assigned a level > > You have to pass the StorageLevel to GraphLoader.edgeListFile: > > val graph = GraphLoader.edgeListFile( > sc, edgesFile, minEdgePartitions = numPartitions, > edgeStorageLevel = StorageLevel.MEMORY_AND_DISK, > vertexStorageLevel = StorageLevel.MEMORY_AND_DISK) > .partitionBy(PartitionStrategy.EdgePartition2D) > > Ankur >