我有scala应用程序在本地(来自IntelliJ IDE(上使用Spark运行,但在Spark集群上运行应用程序时出现以下错误:
Exception in thread "main" java.lang.NoSuchMethodError: com.google.gson.reflect.TypeToken.getParameterized(Ljava/lang/reflect/Type;[Ljava/lang/reflect/Type;)Lcom/google/gson/reflect/TypeToken;
at com.cloudant.client.api.Database.query(Database.java:502)
at com.ibm.ursus.repositories.CloudantRepository.read(CloudantRepository.scala:61)
我的应用程序使用GSON
库版本2.8.2
:
"com.google.code.gson" % "gson" % "2.8.2"
这篇文章为我指明了正确的方向。因此,问题的解决方案是spark-submit
中的以下行:
/opt/spark/bin/spark-submit
--jars gson-2.8.2.jar
--conf spark.driver.extraClassPath=gson-2.8.2.jar
--conf spark.executor.extraClassPath=gson-2.8.2.jar
它将正确的库添加到Spark集群上的,并将其添加到"内部"Spark库2.2.4
之前的类路径中。