NoClassDefFoundError:scala/Product$class在本地计算机上调用scala代码中的aws粘合库时。同一个罐子在aws上用作胶水

NoClassDefFoundError:scala/Product$class在本地计算机上调用scala代码中的aws粘合库时。同一个罐子在aws上用作胶水,scala,apache-spark,aws-glue,aws-glue-spark,Scala,Apache Spark,Aws Glue,Aws Glue Spark,我在scala中使用Spark,在glue脚本中也使用aws glue库。 当我使用scala 2.12版时,我遇到了这个错误 import com.amazonaws.services.glue.{DataSource,DynamicFrame,GlueContext} 导入com.amazonaws.services.glue.util.{GlueArgParser,Job,JsonOptions} 导入org.apache.spark.{SparkConf,SparkContext}

我在scala中使用Spark,在glue脚本中也使用aws glue库。 当我使用scala 2.12版时,我遇到了这个错误

import com.amazonaws.services.glue.{DataSource,DynamicFrame,GlueContext}
导入com.amazonaws.services.glue.util.{GlueArgParser,Job,JsonOptions}
导入org.apache.spark.{SparkConf,SparkContext}
导入scala.collection.JavaConverters_
对象测试{
def main(系统参数:数组[字符串]):单位={
val conf=new SparkConf().setAppName(“GlueExample”).setMaster(“本地”)
val sc=新的SparkContext(配置)
sc.hadoopConfiguration.set(“fs.s3.impl”、“org.apache.hadoop.fs.s3a.S3AFileSystem”)
val gc:GlueContext=新的GlueContext(sc)
val connectionOptions=JsonOptions(映射(
“路径”->Seq(“s3://bucket\u路径”),
“组文件”->“分区”
))
val source:DataSource=gc.getSourceWithFormat(
connectionType=“s3”,
选项=连接选项,
transformationContext=“”,
format=“拼花”,
formatOptions=JsonOptions.empty
)
}
}
Scala版本需要指向2.11的点(因为Spark 2.4.3默认使用Scala 11)。一旦为一个库使用Scala版本,就有必要确保所有其他库都有匹配的版本

您的
build.gradle
文件似乎缺少版本引用(或属性文件中定义版本的变量引用)。请参阅,它有明确的版本号(但也可以使用在属性文件中定义的美元符号变量)


正如一位评论者所指出的,属性文件中的
scalaLibVersion
scalaVersion
不匹配。确保它们匹配,并且所有依赖项都没有使用其他Scala版本。另外,尝试在主gradle依赖项文件中使用显式版本。

我不熟悉Glue,但您可能应该检查所有依赖项是否具有相同的Scala版本(2.11或2.12)。我可以在你的Gradle定义中看到两个不同的值,
scalaVersion=2.11 scalaLibVersion=2.12.12
,这很难闻,尽管我对Gradle也不太了解。@GaëlJ我使用了scalaVersion=2.12和scalaLibVersion=2.12.0,仍然得到相同的错误。我在所有地方都使用了scala版本2.12。我只是在两个版本中显示了两个不同的错误。我认为原因可能是glue需要2.11Scala版本。但同样的罐子在Aws胶水上效果很好。原因可能是我在那里使用了glue 2.0。想弄明白。