aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorcafreeman <cfreeman@alteryx.com>2015-06-26 17:06:02 -0700
committerShivaram Venkataraman <shivaram@cs.berkeley.edu>2015-06-26 17:06:16 -0700
commit9d11817765e2817b11b73c61bae3b32c9f119cfd (patch)
treef18c3613ffadddb0c509ede94820966cd59ff4c0 /core
parenta56516fc9280724db8fdef8e7d109ed7e28e427d (diff)
downloadspark-9d11817765e2817b11b73c61bae3b32c9f119cfd.tar.gz
spark-9d11817765e2817b11b73c61bae3b32c9f119cfd.tar.bz2
spark-9d11817765e2817b11b73c61bae3b32c9f119cfd.zip
[SPARK-8607] SparkR -- jars not being added to application classpath correctly
Add `getStaticClass` method in SparkR's `RBackendHandler` This is a fix for the problem referenced in [SPARK-5185](https://issues.apache.org/jira/browse/SPARK-5185). cc shivaram Author: cafreeman <cfreeman@alteryx.com> Closes #7001 from cafreeman/branch-1.4 and squashes the following commits: 8f81194 [cafreeman] Add missing license 31aedcf [cafreeman] Refactor test to call an external R script 2c22073 [cafreeman] Merge branch 'branch-1.4' of github.com:apache/spark into branch-1.4 0bea809 [cafreeman] Fixed relative path issue and added smaller JAR ee25e60 [cafreeman] Merge branch 'branch-1.4' of github.com:apache/spark into branch-1.4 9a5c362 [cafreeman] test for including JAR when launching sparkContext 9101223 [cafreeman] Merge branch 'branch-1.4' of github.com:apache/spark into branch-1.4 5a80844 [cafreeman] Fix style nits 7c6bd0c [cafreeman] [SPARK-8607] SparkR (cherry picked from commit 2579948bf5d89ac2d822ace605a6a4afce5258d6) Signed-off-by: Shivaram Venkataraman <shivaram@cs.berkeley.edu>
Diffstat (limited to 'core')
-rw-r--r--core/src/main/scala/org/apache/spark/api/r/RBackendHandler.scala17
1 files changed, 16 insertions, 1 deletions
diff --git a/core/src/main/scala/org/apache/spark/api/r/RBackendHandler.scala b/core/src/main/scala/org/apache/spark/api/r/RBackendHandler.scala
index 2e86984c66..4b8f7fe924 100644
--- a/core/src/main/scala/org/apache/spark/api/r/RBackendHandler.scala
+++ b/core/src/main/scala/org/apache/spark/api/r/RBackendHandler.scala
@@ -88,6 +88,21 @@ private[r] class RBackendHandler(server: RBackend)
ctx.close()
}
+ // Looks up a class given a class name. This function first checks the
+ // current class loader and if a class is not found, it looks up the class
+ // in the context class loader. Address [SPARK-5185]
+ def getStaticClass(objId: String): Class[_] = {
+ try {
+ val clsCurrent = Class.forName(objId)
+ clsCurrent
+ } catch {
+ // Use contextLoader if we can't find the JAR in the system class loader
+ case e: ClassNotFoundException =>
+ val clsContext = Class.forName(objId, true, Thread.currentThread().getContextClassLoader)
+ clsContext
+ }
+ }
+
def handleMethodCall(
isStatic: Boolean,
objId: String,
@@ -98,7 +113,7 @@ private[r] class RBackendHandler(server: RBackend)
var obj: Object = null
try {
val cls = if (isStatic) {
- Class.forName(objId)
+ getStaticClass(objId)
} else {
JVMObjectTracker.get(objId) match {
case None => throw new IllegalArgumentException("Object not found " + objId)