Skip to content
Snippets Groups Projects
Commit 016ac868 authored by Matei Zaharia's avatar Matei Zaharia
Browse files

Merge pull request #601 from rxin/emptyrdd-master

EmptyRDD (master branch 0.8)
parents b9aef263 64d4d2b0
No related branches found
No related tags found
No related merge requests found
package spark.rdd
import spark.{RDD, SparkContext, SparkEnv, Partition, TaskContext}
/**
* An RDD that is empty, i.e. has no element in it.
*/
class EmptyRDD[T: ClassManifest](sc: SparkContext) extends RDD[T](sc, Nil) {
override def getPartitions: Array[Partition] = Array.empty
override def compute(split: Partition, context: TaskContext): Iterator[T] = {
throw new UnsupportedOperationException("empty RDD")
}
}
......@@ -5,7 +5,7 @@ import org.scalatest.FunSuite
import org.scalatest.concurrent.Timeouts._
import org.scalatest.time.{Span, Millis}
import spark.SparkContext._
import spark.rdd.{CoalescedRDD, CoGroupedRDD, PartitionPruningRDD, ShuffledRDD}
import spark.rdd.{CoalescedRDD, CoGroupedRDD, EmptyRDD, PartitionPruningRDD, ShuffledRDD}
class RDDSuite extends FunSuite with LocalSparkContext {
......@@ -147,6 +147,26 @@ class RDDSuite extends FunSuite with LocalSparkContext {
assert(rdd.collect().toList === List(1, 2, 3, 4))
}
test("empty RDD") {
sc = new SparkContext("local", "test")
val empty = new EmptyRDD[Int](sc)
assert(empty.count === 0)
assert(empty.collect().size === 0)
val thrown = intercept[UnsupportedOperationException]{
empty.reduce(_+_)
}
assert(thrown.getMessage.contains("empty"))
val emptyKv = new EmptyRDD[(Int, Int)](sc)
val rdd = sc.parallelize(1 to 2, 2).map(x => (x, x))
assert(rdd.join(emptyKv).collect().size === 0)
assert(rdd.rightOuterJoin(emptyKv).collect().size === 0)
assert(rdd.leftOuterJoin(emptyKv).collect().size === 2)
assert(rdd.cogroup(emptyKv).collect().size === 2)
assert(rdd.union(emptyKv).collect().size === 2)
}
test("cogrouped RDDs") {
sc = new SparkContext("local", "test")
val rdd1 = sc.makeRDD(Array((1, "one"), (1, "another one"), (2, "two"), (3, "three")), 2)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment