【问题标题】:Unable to run Unit tests (scalatest) on Spark-2.2.0 - Scala-2.11.8无法在 Spark-2.2.0 - Scala-2.11.8 上运行单元测试(scalatest)
【发布时间】:2018-01-30 16:16:36
【问题描述】:

无法在 spark-2.2.0 上使用上下文运行 run scalatest

堆栈跟踪:

异常或错误导致运行中止:org.apache.spark.sql.test.SharedSQLContext.eventually(Lorg/scalatest/concurrent/PatienceConfiguration$Timeout;Lscala/Function0;Lorg/scalatest/concurrent/AbstractPatienceConfiguration$PatienceConfig ;)Ljava/lang/Object; java.lang.NoSuchMethodError: org.apache.spark.sql.test.SharedSQLContext.eventually(Lorg/scalatest/concurrent/PatienceConfiguration$Timeout;Lscala/Function0;Lorg/scalatest/concurrent/AbstractPatienceConfiguration$PatienceConfig;)Ljava/lang/Object ; 在 org.apache.spark.sql.test.SharedSQLContext$class.afterEach(SharedSQLContext.scala:92) 在 testUtils.ScalaTestWithContext1.afterEach(ScalaTestWithContext1.scala:7) 在 org.scalatest.BeforeAndAfterEach$$anonfun$1.apply$mcV$sp(BeforeAndAfterEach.scala:234)

示例代码:

  import org.apache.spark.sql.SparkSession
  import testUtils.ScalaTestWithContext1

  class SampLeTest extends ScalaTestWithContext1 {
  override protected def spark: SparkSession = ???

     test("test") {
        1 == 1 shouldBe true
     }
  }

ScalaTestWithContext1.scala

  import org.apache.spark.sql.QueryTest
  import org.apache.spark.sql.test.SharedSQLContext
  import org.scalatest.{BeforeAndAfterAll, Matchers}

  abstract class ScalaTestWithContext extends QueryTest with SharedSQLContext with Matchers with BeforeAndAfterAll{}

build.sbt:

name := "test"
version := "1.0"
scalaVersion := "2.11.11"

parallelExecution in Test := false

libraryDependencies ++= Seq(
  "org.scala-lang" % "scala-library" % "2.11.11" % "provided",
  "org.apache.spark" %% "spark-core" % "2.2.0",
  "org.apache.spark" %% "spark-sql" % "2.2.0",
  "org.apache.spark" %% "spark-catalyst" % "2.2.0",
  "org.apache.spark" %% "spark-core" % "2.2.0" % "test" classifier 
"tests",
  "org.apache.spark" %% "spark-sql" % "2.2.0" % "test" classifier 
"tests",
  "org.apache.spark" %% "spark-catalyst" % "2.2.0" % "test" classifier 
"tests",
  "org.scalatest" %% "scalatest" % "3.0.1" % "test"
) 

ScalaTestWithContext1 类扩展了 SharedSQLContext 和所有必需的特征。

提前致谢。

【问题讨论】:

  • 稍微减少堆栈跟踪并添加一些相关代码。
  • scalatest with sharedSQLContext 适用于 spark-2.1.0,我对 spark-2.2.0 有问题
  • 项目的build.sbt 是什么?

标签: scala apache-spark sbt apache-spark-sql scalatest


【解决方案1】:

我遇到了类似的问题。对我有用的解决方案是使用 Scalatest 的 2.2.6 版本而不是 3.x 版本。 Maven repository 还在“测试依赖项”部分中显示了正确的依赖项。

【讨论】:

  • 试过了。我的依赖项中存在的两个 jar 都从测试依赖项中删除了 2.x。仍然有同样的问题。
  • 保留2.2.6的依赖,删除3.x的依赖。
  • 试过了。不工作。我们找到了根本不使用 SharedSQLContext 的解决方法。感谢您的建议。
  • 您可以分享您的解决方法。我们正在尝试对 spark jdbc 和 hive 上下文相关代码进行单元测试。
【解决方案2】:

类似as already pointed out,请查看Spark's github repository 中的pom.xml 文件,以确保您使用的是相同的最新版本。

可能有更好的解决方案,例如将 sbt 合并或覆盖您首选的 scalatest 版本而不是 Spark,但截至 2019 年 12 月,Spark 2.4.4 正在使用 Scalatest 3.0.3,这是相当新的。

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 2018-05-08
    • 2019-04-29
    • 2019-09-27
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2021-09-18
    相关资源
    最近更新 更多