Код: Выделить всё
$scalaMajorVersion:$sparkVersion"Я создал приспособление многократного использования для тестирования, которое я хотел бы использовать в различных подмодулях моего проекта Scala для модульного тестирования конкретных искр. логика.
Мой проект разбит следующим образом:
Код: Выделить всё
├───module_a
build.gradle
│ src/
main/
scala/
SparkTransformationLogic.scala
tests/
TestSparkTransformationLogic.scala
├───common-test-utils
build.gradle
│ src/
main/
scala/
SparkTestingFixture.scala
├───module_c
build.gradle
main/
scala/
FooBarLogic.scala
tests/
TestFooBarLogic.scala
build.gradle
Сборка модуля A. градиент:
Код: Выделить всё
apply plugin: 'com.company.gradle.foobar.library'
dependencies {
implementation project(":common-test-utils")
implementation("org.apache.spark:spark-core_$scalaMajorVersion:$sparkVersion"){
exclude group: "org.apache.logging.log4j"
}
implementation "org.apache.spark:spark-mllib_$scalaMajorVersion:$sparkVersion"
implementation ("org.apache.spark:spark-sql_$scalaMajorVersion:$sparkVersion"){
exclude group: "org.apache.logging.log4j"
}
implementation "org.apache.spark:spark-streaming_$scalaMajorVersion:$sparkVersion"
implementation "org.apache.spark:spark-hive_$scalaMajorVersion:$sparkVersion"
implementation "com.company.yahoobug:jvm-config-api:$jvmConfigVersion"
implementation "com.company.yahoobug:sparkutils-environment:$sparkUtilsVersion"
implementation "com.company.yahoobug:sparkutils-job:$sparkUtilsVersion"
implementation "com.company.yahoobug:sparkutils-logging:$sparkUtilsVersion"
implementation "com.company.yahoobug:sparkutils-spark:$sparkUtilsVersion"
testImplementation "org.scalatest:scalatest_$scalaMajorVersion:$scalaTestVersion"
testImplementation "org.slf4j:slf4j-api:1.7.36"
testImplementation "org.json4s:json4s-jackson_2.12:3.6.7"
}
Код: Выделить всё
plugins {
id 'scala'
}
apply plugin: "java"
apply plugin: "scala"
dependencies {
implementation("org.apache.spark:spark-core_$scalaMajorVersion:$sparkVersion")
implementation "org.apache.spark:spark-mllib_$scalaMajorVersion:$sparkVersion"
implementation("org.apache.spark:spark-sql_$scalaMajorVersion:$sparkVersion")
implementation "org.apache.spark:spark-streaming_$scalaMajorVersion:$sparkVersion"
implementation "org.apache.spark:spark-hive_$scalaMajorVersion:$sparkVersion"
implementation "org.scalatest:scalatest_$scalaMajorVersion:$scalaTestVersion"
implementation "org.json4s:json4s-core_2.12:3.6.7"
implementation "org.json4s:json4s-native_2.12:3.6.7"
implementation "org.json4s:json4s-jackson_2.12:3.6.7"
}
Код: Выделить всё
plugins {
id 'com.foobar.gradle.repos' version '0.3.10'
id 'com.foobar.gradle.foozy.library' version "1.0.23"
id 'com.github.maiflai.scalatest' version '0.35'
id 'com.foobar.gradle.checks' version '1.2.3'
}
apply from: 'versions.gradle'
allprojects {
apply plugin: "com.github.maiflai.scalatest"
group 'com.foobar.foozy'
}
subprojects {
apply plugin: 'java-library'
apply plugin: 'scala'
apply plugin: "com.foorbar.gradle.repos"
apply plugin: "com.github.maiflai.scalatest"
fooBarRepositoryPlugin {
forceGuavaVersion = false
}
tasks.withType(JavaCompile) {
sourceCompatibility = "1.8"
targetCompatibility = "1.8"
}
configurations {
sparkTestImplementation
sparkTestRuntimeOnly
}
dependencies {
implementation "org.scala-lang:scala-library:$scalaVersion"
implementation "org.scala-lang.modules:scala-java8-compat_$scalaMajorVersion:0.9.1"
implementation "org.openjdk.jol:jol-core:0.9" // for local object size diagnostics
implementation "commons-io:commons-io:2.4"
implementation "org.apache.hadoop:hadoop-common:$hadoopVersion"
implementation "org.apache.hadoop:hadoop-mapreduce-client-core:$hadoopVersion"
implementation("org.apache.spark:spark-core_$scalaMajorVersion:$sparkVersion") {
exclude group: "org.apache.logging.log4j"
}
implementation "org.apache.spark:spark-mllib_$scalaMajorVersion:$sparkVersion"
implementation "org.apache.spark:spark-sql_$scalaMajorVersion:$sparkVersion"
implementation "org.apache.spark:spark-streaming_$scalaMajorVersion:$sparkVersion"
implementation "org.apache.spark:spark-hive_$scalaMajorVersion:$sparkVersion"
implementation "org.xerial.snappy:snappy-java:1.1.2.1"
implementation "com.amazonaws:aws-java-sdk-s3:1.11.333"
implementation "com.amazonaws:aws-java-sdk-ec2:1.11.333"
implementation "com.amazonaws:aws-java-sdk-kinesis:1.11.333"
implementation "joda-time:joda-time:$jodaVersion"
implementation "com.github.nscala-time:nscala-time_$scalaMajorVersion:2.14.0"
compile "com.datadoghq:java-dogstatsd-client:$dogstatsdVersion"
testImplementation "junit:junit:4.12"
testImplementation "org.scalatestplus:scalatestplus-junit_$scalaMajorVersion:1.0.0-M2"
testImplementation "org.scalatest:scalatest_$scalaMajorVersion:$scalaTestVersion"
testImplementation "org.mockito:mockito-all:$mockitoVersion"
implementation "com.vladsch.flexmark:flexmark-all:0.62.2"
testRuntimeOnly "org.slf4j:slf4j-jdk14:1.7.30"
testImplementation 'org.apache.logging.log4j:log4j-1.2-api:2.17.2'
}
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:5.0.0'
}
}
}
checks {
checkScalaStyle = false
}
// Script to copy audit test data
task zipTipZap {
description "Publish task"
doLast {
println("gathering audit data for $project.name")
copy { //Test Results
from ('.') {
include '**/test-results/**/TEST-*.xml'
exclude '**/build/audit_data' //exclude itself from scanning
}
into 'build/audit_data/test_results'
includeEmptyDirs false
}
}
}
Код: Выделить всё
import org.apache.spark.sql.SparkSession
//import org.scalatest.funsuite.AnyFunSuite
import org.scalatest.{BeforeAndAfterEach, Suite}
import java.io.File
import java.nio.file.Files
trait SparkSessionFixture extends BeforeAndAfterEach { this: Suite =>
@transient var spark: SparkSession = _
val warehouseLocation: String = Files.createTempDirectory("spark-warehouse").toFile.getAbsolutePath
val metastoreLocation: String = Files.createTempDirectory("spark-metastore").toFile.getAbsolutePath
val tempHadoopDir: File = Files.createTempDirectory("hadoop_home").toFile
System.setProperty("derby.system.home", metastoreLocation)
System.setProperty("hadoop.home.dir", tempHadoopDir.getAbsolutePath)
override protected def beforeEach(): Unit = {
super.beforeEach()
spark = SparkSession
.builder()
.master("local")
.appName("spark session")
.config("spark.ui.enabled", "false")
.config("spark.sql.shuffle.partitions", "1")
.config("spark.sql.warehouse.dir", warehouseLocation)
.config("javax.jdo.option.ConnectionURL", s"jdbc:derby:;databaseName=metastore_db;create=true")
.enableHiveSupport()
.getOrCreate()
}
override protected def afterEach(): Unit = {
if (spark != null) {
spark.stop()
}
super.afterEach()
}
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... -to-json4s
Мобильная версия