From 0aa23bf17e0dfeb985b9298141fab5003d74199c Mon Sep 17 00:00:00 2001 From: Matei Zaharia <matei@eecs.berkeley.edu> Date: Mon, 29 Aug 2011 22:59:44 -0700 Subject: [PATCH] Added a convenience method for getting the JAR file that loaded a class (useful for jobs to pass their own JAR files to SparkContext). --- core/src/main/scala/spark/SparkContext.scala | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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 + } + } } -- GitLab