2016-12-16 97 views
2

我的整个build.sbt是:星火单元测试

name := """sparktest""" 

version := "1.0.0-SNAPSHOT" 

scalaVersion := "2.11.8" 

scalacOptions := Seq("-unchecked", "-deprecation", "-encoding", "utf8", "-Xexperimental") 

parallelExecution in Test := false 

libraryDependencies ++= Seq(
    "org.apache.spark" %% "spark-core" % "2.0.2", 
    "org.apache.spark" %% "spark-sql" % "2.0.2", 
    "org.apache.avro" % "avro" % "1.8.1", 

    "org.scalatest" %% "scalatest" % "3.0.1" % "test", 
    "com.holdenkarau" %% "spark-testing-base" % "2.0.2_0.4.7" % "test" 
) 

我有一个简单的测试。显然,这只是一个起点,我想测试更多:

package sparktest 

import com.holdenkarau.spark.testing.DataFrameSuiteBase 

import org.scalatest.FunSuite 

class SampleSuite extends FunSuite with DataFrameSuiteBase { 
    test("simple test") { 
    assert(1 + 1 === 2) 
    } 
} 

我跑sbt clean test并获得衰竭:

Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf$ConfVars 

对于我的开发环境,我使用的spark-2.0.2-bin-hadoop2.7.ta​​r.gz

我必须以任何方式配置此环境吗?显然HiveConf是一个传递性的Spark依赖项

+3

我认为你必须明确地向你的依赖添加 '“org.apache.spark”%%“spark-hive”%“2.0.2”'。 –

回答

2

由于@ daniel-de-paula在评论中提到,你需要添加spark-hive作为显式依赖(你可以限制它到测试范围,但是如果你没有使用蜂巢在你的应用程序中它自己)。 spark-hive不是spark-core的传递依赖,这就是发生这种错误的原因。 spark-hive作为依赖项被排除在spark-testing-base之外,因此只进行RDD测试的人不需要将其作为依赖项添加。

+0

嗨 - 我可以要求你在这里添加这个细节 - https://github.com/holdenk/spark-testing-base/wiki/DataFrameSuiteBase - 这对其他人会有帮助。 –