diff options
author | Matei Zaharia <matei@eecs.berkeley.edu> | 2011-08-29 22:59:44 -0700 |
---|---|---|
committer | Matei Zaharia <matei@eecs.berkeley.edu> | 2011-08-29 22:59:44 -0700 |
commit | 0aa23bf17e0dfeb985b9298141fab5003d74199c (patch) | |
tree | dc593db53d55f16eb5e5fe911af3f864e10e9f12 | |
parent | 9b7215d74a2333f02bf40975b062835841db868c (diff) | |
download | spark-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.scala | 18 |
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 + } + } } |