-
Notifications
You must be signed in to change notification settings - Fork 48
Description
This issue was encountered while we were attempting to shade the com.typesafe.scala-logging classes in an effort to get RasterFrames running in DataBricks environment. DataBricks itself brings ins com.typesafe.scala-logging version 2.1.2 on the class path which is not binary compatible with version 3.9.0 used by RasterFrames and will result in InstantiationException
Reproduce
The failure to shade can be reproduced locally and shows ups as a failed import.
The attempt is done against current develop by trying to hook into the mechanism in RFAssemblyPlugin
diff --git a/project/RFAssemblyPlugin.scala b/project/RFAssemblyPlugin.scala
index 8f69776f..223257a2 100644
--- a/project/RFAssemblyPlugin.scala
+++ b/project/RFAssemblyPlugin.scala
@@ -53,7 +53,8 @@ object RFAssemblyPlugin extends AutoPlugin {
"com.amazonaws",
"org.apache.avro",
"org.apache.http",
- "com.google.guava"
+ "com.google.guava",
+ "com.typesafe.scalalogging"
)
shadePrefixes.map(p ⇒ ShadeRule.rename(s"$p.**" -> s"rf.shaded.$p.@1").inAll)
},Then creating assembly using:
sbt 'project pyrasterframes' assemblyInspecting the assembly jar we see the shading took effect:
~/p/r/p/t/scala-2.11 ❯❯❯ unzip -l pyrasterframes-assembly-0.8.0-SNAPSHOT.jar | grep scalalogging develop ✚ ✱
0 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/
590 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/CanLog$class.class
888 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/CanLog.class
1002 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LazyLogging$class.class
589 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LazyLogging.class
3875 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/Logger$.class
15727 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/Logger.class
5104 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerMacro$$anon$1.class
2766 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerMacro$$anonfun$1.class
1366 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerMacro$$anonfun$2.class
1604 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerMacro$$anonfun$3.class
2196 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerMacro$$anonfun$4.class
2203 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerMacro$$anonfun$debugMessageArgs$1.class
2251 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerMacro$$anonfun$debugMessageArgsMarker$1.class
2202 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerMacro$$anonfun$errorMessageArgs$1.class
2250 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerMacro$$anonfun$errorMessageArgsMarker$1.class
6090 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerMacro$$anonfun$formatArgs$1.class
2199 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerMacro$$anonfun$infoMessageArgs$1.class
2248 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerMacro$$anonfun$infoMessageArgsMarker$1.class
2203 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerMacro$$anonfun$traceMessageArgs$1.class
2252 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerMacro$$anonfun$traceMessageArgsMarker$1.class
2199 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerMacro$$anonfun$warnMessageArgs$1.class
2247 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerMacro$$anonfun$warnMessageArgsMarker$1.class
31565 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerMacro$.class
9902 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerMacro.class
13906 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerTakingImplicit.class
2292 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerTakingImplicitMacro$$anonfun$debugMessageArgs$1.class
2340 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerTakingImplicitMacro$$anonfun$debugMessageArgsMarker$1.class
2291 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerTakingImplicitMacro$$anonfun$errorMessageArgs$1.class
2339 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerTakingImplicitMacro$$anonfun$errorMessageArgsMarker$1.class
2289 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerTakingImplicitMacro$$anonfun$infoMessageArgs$1.class
2337 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerTakingImplicitMacro$$anonfun$infoMessageArgsMarker$1.class
2292 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerTakingImplicitMacro$$anonfun$traceMessageArgs$1.class
2340 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerTakingImplicitMacro$$anonfun$traceMessageArgsMarker$1.class
2288 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerTakingImplicitMacro$$anonfun$warnMessageArgs$1.class
2337 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerTakingImplicitMacro$$anonfun$warnMessageArgsMarker$1.class
46510 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerTakingImplicitMacro$.class
11097 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/LoggerTakingImplicitMacro.class
1030 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/StrictLogging$class.class
689 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/StrictLogging.class
449 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/package$.class
667 08-15-2019 18:38 rf/shaded/com/typesafe/scalalogging/package.class
Trying to use the assembly goes south:
~/p/r/p/t/scala-2.11 ❯❯❯ spark-shell --jars /Users/eugene/proj/rasterframes/pyrasterframes/target/scala-2.11/pyrasterframes-assembly-0.8.0-SNAPSHOT.jar
19/08/17 13:12:36 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Spark context Web UI available at http://10.1.240.31:4040
Spark context available as 'sc' (master = local[*], app id = local-1566061963577).
Spark session available as 'spark'.
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.4.3
/_/
Using Scala version 2.11.12 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_211)
Type in expressions to have them evaluated.
Type :help for more information.
scala> import org.locationtech.rasterframes._
<console>:23: error: Symbol 'type <none>.scalalogging.LazyLogging' is missing from the classpath.
This symbol is required by 'package org.locationtech.rasterframes.package'.
Make sure that type LazyLogging is in your classpath and check for conflicting dependencies with `-Ylog-classpath`.
A full rebuild may help if 'package.class' was compiled against an incompatible version of <none>.scalalogging.
import org.locationtech.rasterframes._
^
Trying to see what is going on in package org.locationtech.rasterframes.package everything seems hunky-dory:
~/p/r/p/t/s/j/o/l/rasterframes ❯❯❯ javap package\$ develop ✚ ✱
Warning: Binary file package$ contains org.locationtech.rasterframes.package$
Compiled from "rasterframes.scala"
public final class org.locationtech.rasterframes.package$ implements org.locationtech.rasterframes.StandardColumns,org.locationtech.rasterframes.RasterFunctions,org.locationtech.rasterframes.util.ZeroSevenCompatibilityKit$RasterFunctions,org.locationtech.rasterframes.extensions.Implicits,org.locationtech.rasterframes.jts.Implicits,org.locationtech.rasterframes.encoders.StandardEncoders,org.locationtech.geomesa.spark.jts.DataFrameFunctions$Library,rf.shaded.com.typesafe.scalalogging.LazyLogging {
public static final org.locationtech.rasterframes.package$ MODULE$;
public static {};
public rf.shaded.com.typesafe.scalalogging.Logger logger();
public org.apache.spark.sql.TypedColumn<java.lang.Object, org.locationtech.jts.geom.Geometry> st_translate(org.apache.spark.sql.Column, org.apache.spark.sql.Column, org.apache.spark.sql.Column);
Note that it implements the shaded version rf.shaded.com.typesafe.scalalogging.LazyLogging