Spark测试用例不适用于2.4.0版本



我们有一个使用hadoop3.1.3和spark 2.4.0的应用程序。Map Reduce派生是使用Java编写的。Spark数据集派生是使用Java编写的。Map Reduce测试用例运行良好,但Spark junit测试用例失败了spark会话创建正确,并且在使用spark会话加载示例json文件时:

Dataset<Row> input = sparkSession.read()
.format("json")
.option("timestampFormat", "yyyy/MM/dd HH:mm:ss ZZ")
.option("quote", """)
.option("multiline", true)
.load("src/test/resources/samples/abcd.json");

错误发生如下:

Exception in thread "dag-scheduler-event-loop" java.lang.NoSuchMethodError: org.apache.hadoop.mapreduce.InputSplit.getLocationInfo()[Lorg/apache/hadoop/mapred/SplitLocationInfo;
at org.apache.spark.rdd.NewHadoopRDD.getPreferredLocations(NewHadoopRDD.scala:310)

环境变量设置为:

HADOOP_HOME=c:hadoop-2.7.1 JAVA_HOME=c:openjdk1.8.0_271 SPARK_HOME=c:spark-2.4.0-bin-hadoop2.7(since spark2.4 uses hadoop 2.7.1) 

我应该排除spark中的哪个jar,或者应该包括任何hadoop jar?或者其他需要检查的步骤?

我找到了解决上述问题的方法。必须引入以下依赖

<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-core</artifactId>
<version>3.1.1.7.1.6.0-297</version>
</dependency>

最新更新