aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoris Xin <doris.s.xin@gmail.com>2014-06-12 12:53:07 -0700
committerXiangrui Meng <meng@databricks.com>2014-06-12 12:53:07 -0700
commit83c226d454722d5dea186d48070fb98652d0dafb (patch)
treed2980546000584aab7cf4c196b5731d4e033a6d9
parentce92a9c18f033ac9fa2f12143fab00a90e0f4577 (diff)
downloadspark-83c226d454722d5dea186d48070fb98652d0dafb.tar.gz
spark-83c226d454722d5dea186d48070fb98652d0dafb.tar.bz2
spark-83c226d454722d5dea186d48070fb98652d0dafb.zip
[SPARK-2088] fix NPE in toString
After deserialization, the transient field creationSiteInfo does not get backfilled with the default value, but the toString method, which is invoked by the serializer, expects the field to always be non-null. An NPE is thrown when toString is called by the serializer when creationSiteInfo is null. Author: Doris Xin <doris.s.xin@gmail.com> Closes #1028 from dorx/toStringNPE and squashes the following commits: f20021e [Doris Xin] unit test for toString after desrialization 6f0a586 [Doris Xin] Merge branch 'master' into toStringNPE f47fecf [Doris Xin] Merge branch 'master' into toStringNPE 76199c6 [Doris Xin] [SPARK-2088] fix NPE in toString
-rw-r--r--core/src/main/scala/org/apache/spark/rdd/RDD.scala2
-rw-r--r--core/src/test/scala/org/apache/spark/rdd/RDDSuite.scala9
2 files changed, 9 insertions, 2 deletions
diff --git a/core/src/main/scala/org/apache/spark/rdd/RDD.scala b/core/src/main/scala/org/apache/spark/rdd/RDD.scala
index 54bdc3e7cb..b6fc4b13ad 100644
--- a/core/src/main/scala/org/apache/spark/rdd/RDD.scala
+++ b/core/src/main/scala/org/apache/spark/rdd/RDD.scala
@@ -1180,7 +1180,7 @@ abstract class RDD[T: ClassTag](
/** User code that created this RDD (e.g. `textFile`, `parallelize`). */
@transient private[spark] val creationSiteInfo = Utils.getCallSiteInfo
- private[spark] def getCreationSite: String = creationSiteInfo.toString
+ private[spark] def getCreationSite: String = Option(creationSiteInfo).getOrElse("").toString
private[spark] def elementClassTag: ClassTag[T] = classTag[T]
diff --git a/core/src/test/scala/org/apache/spark/rdd/RDDSuite.scala b/core/src/test/scala/org/apache/spark/rdd/RDDSuite.scala
index 55af1666df..2e2ccc5a18 100644
--- a/core/src/test/scala/org/apache/spark/rdd/RDDSuite.scala
+++ b/core/src/test/scala/org/apache/spark/rdd/RDDSuite.scala
@@ -24,7 +24,7 @@ import org.scalatest.FunSuite
import org.apache.spark._
import org.apache.spark.SparkContext._
-import org.apache.spark.rdd._
+import org.apache.spark.util.Utils
class RDDSuite extends FunSuite with SharedSparkContext {
@@ -66,6 +66,13 @@ class RDDSuite extends FunSuite with SharedSparkContext {
}
}
+ test("serialization") {
+ val empty = new EmptyRDD[Int](sc)
+ val serial = Utils.serialize(empty)
+ val deserial: EmptyRDD[Int] = Utils.deserialize(serial)
+ assert(!deserial.toString().isEmpty())
+ }
+
test("countApproxDistinct") {
def error(est: Long, size: Long) = math.abs(est - size) / size.toDouble