Код: Выделить всё
SharedSparkSession
Код: Выделить всё
SharedUnitTestSparkSession
Код: Выделить всё
SharedHiveSparkSession
Некоторые тесты нуждаются в поддержке HIVE (например, создание временных представлений, запуска SQL -запросов), а некоторые не делают. /> Тесты проходят при выполнении всех тестов в IntelliJ < /p>
< /li>
Test Pass на сервере Gitlab CI, вероятно, как Unix < /p>
< /li>
Тесты проваливаются при выполнении чистого теста MVN через Commandally /intellij < /p>
/> < /ul>
Ошибки - это только одно: < /p>
Код: Выделить всё
Hadoop home dir / filesystem implementation errors (HADOOP_HOME / winutils.exe issues)
Я пробовал:
Код: Выделить всё
spark.sparkContext.hadoopConfiguration
.setClass("fs.file.impl", classOf[org.apache.hadoop.fs.BareLocalFileSystem], classOf[FileSystem])
< /code>
Это устанавливается как в чертах блока, так и в Sparkhive: < /p>
trait SharedSparkSession extends BeforeAndAfterAll { this: Suite =>
@transient protected var spark: SparkSession = _
override def beforeAll(): Unit = {
super.beforeAll()
spark = SparkSession.builder()
.appName("Unit Test Session")
.master("local[*]")
.getOrCreate()
spark.sparkContext.hadoopConfiguration
.setClass("fs.file.impl", classOf[org.apache.hadoop.fs.BareLocalFileSystem], classOf[FileSystem])
}
override def afterAll(): Unit = {
if (spark != null) {
spark.stop()
spark = null
//clears active sessions also
}
super.afterAll()
}
}
< /code>
hive one установлен следующим образом: < /p>
trait SharedHiveSparkSession extends SharedSparkSession { this: Suite =>
override def beforeAll(): Unit = {
super.beforeAll()
val tempDir = java.nio.file.Files.createTempDirectory("spark_metastore").toAbsolutePath.toString
spark = SparkSession.builder()
.appName("Hive Test Session")
.master("local[*]")
.config("spark.sql.warehouse.dir", s"$tempDir/warehouse")
.config("javax.jdo.option.ConnectionURL", s"jdbc:derby:metastore_db_${UUID.randomUUID().toString};create=true")
.enableHiveSupport()
.getOrCreate()
spark.sparkContext.hadoopConfiguration
.setClass("fs.file.impl", classOf[org.apache.hadoop.fs.BareLocalFileSystem], classOf[FileSystem])
}
}
< /code>
и модульный тест выглядит следующим образом: < /p>
trait SharedUnitTestSparkSession extends SharedSparkSession { this: Suite =>
override def beforeAll(): Unit = {
super.beforeAll()
spark = SparkSession.builder()
.appName("Unit Test Spark Session")
.master("local[*]")
.getOrCreate()
spark.sparkContext.hadoopConfiguration
.setClass("fs.file.impl", classOf[org.apache.hadoop.fs.BareLocalFileSystem], classOf[FileSystem])
}
}
< /code>
Затем тест: < /p>
class MyIntegrationTest extends AnyFlatSpec with SharedHiveSparkSession {
"A Hive-backed DataFrame" should "perform test operation" in {
implicit val implicitSpark: SparkSession = spark
import spark.implicits._
val df = Seq((1, "foo"), (2, "bar")).toDF("id", "value")
df.createOrReplaceTempView("my_table")
val result = spark.sql("SELECT COUNT(*) as total FROM my_table").collect().head.getLong(0)
assert(result == 2)
}
}
Что я ищу:
. /> < /li>
Чистые стратегии, позволяющие избежать проблем с блокировкой Derby Metastore и конфликтов конфигурации файловой системы < /p>
< /li>
< /ul>
Некоторые предложения кодов или точно определить, что мне не хватает в Maven или конфигурации в целом:) < /p>
< /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> />
maven surefire 3.2.5 < /li>
Scala 2.12 < /li>
Spark 3.4.1 < /li>
< /ul>
Подробнее здесь: https://stackoverflow.com/questions/796 ... n-intellij