执行包含SparkSession构建器的

时间:2018-05-30 09:00:34

标签: scala maven apache-spark jar

我目前正在开发一个项目,其中包括针对Scala,MongoDB和Maven的Spark API。

我们使用的版本如下:

Spark:2.2.0

斯卡拉:2.11.8

Maven:3.5.3

MongoDB:3.6.3

Spark的MongoDB连接器:2.2.0

jar的主类包含以下代码行:

val spark = SparkSession.builder().master("local[*]").getOrCreate()

当我尝试运行main时,这是我的错误:

  

使用Spark的默认log4j配置文件:org / apache / spark / log4j-defaults.properties       18/05/30 10:04:26 INFO SparkContext:运行Spark 2.2.0版       线程“main”中的异常java.lang.NoSuchMethodError:com.google.common.cache。       CacheBuilder.refreshAfterWrite(JLjava / util的/并行/ TIMEUNIT)LCOM /谷歌/ COMM       上/高速缓存/ CacheBuilder;               在org.apache.hadoop.security.Groups。(Groups.java:96)               在org.apache.hadoop.security.Groups。(Groups.java:73)               在org.apache.hadoop.security.Groups.getUserToGroupsMappingService(Group       s.java:293)               在org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupI       nformation.java:283)               在org.apache.hadoop.security.UserGroupInformation.ensureInitialized(使用       rGroupInformation.java:260)               在org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(       UserGroupInformation.java:789)               在org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGrou       pInformation.java:774)               在org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGr       oupInformation.java:647)               在org.apache.spark.util.Utils $$ anonfun $ getCurrentUserName $ 1.apply(Utils)       .scala:2430)               在org.apache.spark.util.Utils $$ anonfun $ getCurrentUserName $ 1.apply(Utils)       .scala:2430)               在scala.Option.getOrElse(Option.scala:121)               at org.apache.spark.util.Utils $ .getCurrentUserName(Utils.scala:2430)               在org.apache.spark.SparkContext。(SparkContext.scala:295)               在org.apache.spark.SparkContext $ .getOrCreate(SparkContext.scala:2509)               在org.apache.spark.sql.SparkSession $ Builder $$ anonfun $ 6.apply(SparkSessi)       on.scala:909)               在org.apache.spark.sql.SparkSession $ Builder $$ anonfun $ 6.apply(SparkSessi)       on.scala:901)               在scala.Option.getOrElse(Option.scala:121)               在org.apache.spark.sql.SparkSession $ Builder.getOrCreate(SparkSession.sc       ALA:901)               在fr.atos.gsec.Main $ .main(Main.scala:12)               在fr.atos.gsec.Main.main(Main.scala)`

错误由getOrCreate()方法触发。

当我直接在IntelliJ上运行此主程序时,它可以正常工作并启动Spark,没有任何问题。

非常感谢你的帮助

1 个答案:

答案 0 :(得分:0)

您需要将库包含在导出的jar中。默认情况下,它们不包含在导出的Jar中,因为IDE假定它们在运行时存在,而它们不存在。否则,可能是your classpath contains two or more versions of guava.确保您只有一个guava binary available应用程序。