aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatei Zaharia <matei@eecs.berkeley.edu>2011-08-29 22:59:44 -0700
committerMatei Zaharia <matei@eecs.berkeley.edu>2011-08-29 22:59:44 -0700
commit0aa23bf17e0dfeb985b9298141fab5003d74199c (patch)
treedc593db53d55f16eb5e5fe911af3f864e10e9f12
parent9b7215d74a2333f02bf40975b062835841db868c (diff)
downloadspark-0aa23bf17e0dfeb985b9298141fab5003d74199c.tar.gz
spark-0aa23bf17e0dfeb985b9298141fab5003d74199c.tar.bz2
spark-0aa23bf17e0dfeb985b9298141fab5003d74199c.zip
Added a convenience method for getting the JAR file that loaded a class
(useful for jobs to pass their own JAR files to SparkContext).
-rw-r--r--core/src/main/scala/spark/SparkContext.scala18
1 files changed, 18 insertions, 0 deletions
diff --git a/core/src/main/scala/spark/SparkContext.scala b/core/src/main/scala/spark/SparkContext.scala
index f7cc614fc1..598432c94a 100644
--- a/core/src/main/scala/spark/SparkContext.scala
+++ b/core/src/main/scala/spark/SparkContext.scala
@@ -353,6 +353,24 @@ object SparkContext {
implicit def writableWritableConverter[T <: Writable]() =
new WritableConverter[T](_.erasure.asInstanceOf[Class[T]], _.asInstanceOf[T])
+
+ // Find the JAR from which a given class was loaded, to make it easy for users to pass
+ // their JARs to SparkContext
+ def jarOfClass[T: ClassManifest]: Option[String] = {
+ val cls = classManifest[T].erasure
+ val uri = cls.getResource("/" + cls.getName.replace('.', '/') + ".class")
+ if (uri != null) {
+ val uriStr = uri.toString
+ if (uriStr.startsWith("jar:file:")) {
+ // URI will be of the form "jar:file:/path/foo.jar!/package/cls.class", so pull out the /path/foo.jar
+ Some(uriStr.substring("jar:file:".length, uriStr.indexOf('!')))
+ } else {
+ None
+ }
+ } else {
+ None
+ }
+ }
}