How to use dbutils in a SparkListener on Databricks - azure

Using Azure Databricks Runtime 9.1, I want to start a SparkListener and access dbutils features inside of the SparkListener.
This listener should log some information on the start of the Spark application. It should list out the file system (as a simple example) using dbutils.fs.ls.
The question How to properly access dbutils in Scala when using Databricks Connect is super close to what I'm looking to do but they are focused on dbconnect whereas I want dbutils on a SparkListener. It does point to the dbutils api library on MS Docs page where it seems to indicate that I need only specify the correct target and version of the dbutils-api package.
In the sample listener below...
If I do not include the import com.databricks.dbutils_v1.DBUtilsHolder.dbutils the jar fails to compile since I reference dbutils in the onApplicationStart method.
When I do include the import, it successfully compiles.
However, it fails to initialize the SparkListener.
I receive a NullPointerException after it tries to execute the dbutils.fs.ls command.
Any thoughts and/or guidance would be greatly appreciated!
Sample Listener Using dbutils on Application Start
package my.custom.listener
import java.util.logging.Logger
import org.apache.spark.scheduler.{SparkListener, SparkListenerApplicationStart}
import org.slf4j.{Logger, LoggerFactory}
// Crucial Import
import com.databricks.dbutils_v1.DBUtilsHolder.dbutils
class LibraryListener extends SparkListener {
private var isDatabricks = false
val log = LoggerFactory.getLogger(classOf[LibraryListener])
override def onApplicationStart(applicationStart: SparkListenerApplicationStart): Unit = {
log.info("HELLO WORLD!")
log.info(s"App Name ${applicationStart.appName}")
log.info(s"User ${applicationStart.sparkUser}")
isDatabricks = !(sys.env.get("DATABRICKS_RUNTIME_VERSION").isEmpty)
if (isDatabricks){
log.info("WE ARE USING DATABRICKS!")
// Dummy example of using dbutils
log.info(dbutils.fs.ls("dbfs:/"))
}
}
}
Error Message From Spark Listener Initialization
org.apache.spark.SparkException: Exception when registering SparkListener
at org.apache.spark.SparkContext.setupAndStartListenerBus(SparkContext.scala:2829)
at org.apache.spark.SparkContext.<init>(SparkContext.scala:701)
at com.databricks.backend.daemon.driver.DatabricksILoop$.$anonfun$initializeSharedDriverContext$1(DatabricksILoop.scala:347)
at com.databricks.backend.daemon.driver.ClassLoaders$.withContextClassLoader(ClassLoaders.scala:29)
at com.databricks.backend.daemon.driver.DatabricksILoop$.initializeSharedDriverContext(DatabricksILoop.scala:347)
at com.databricks.backend.daemon.driver.DatabricksILoop$.getOrCreateSharedDriverContext(DatabricksILoop.scala:277)
at com.databricks.backend.daemon.driver.DriverCorral.driverContext(DriverCorral.scala:229)
at com.databricks.backend.daemon.driver.DriverCorral.<init>(DriverCorral.scala:102)
at com.databricks.backend.daemon.driver.DriverDaemon.<init>(DriverDaemon.scala:50)
at com.databricks.backend.daemon.driver.DriverDaemon$.create(DriverDaemon.scala:287)
at com.databricks.backend.daemon.driver.DriverDaemon$.wrappedMain(DriverDaemon.scala:362)
at com.databricks.DatabricksMain.$anonfun$main$1(DatabricksMain.scala:117)
at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
at com.databricks.DatabricksMain.$anonfun$withStartupProfilingData$1(DatabricksMain.scala:425)
at com.databricks.logging.UsageLogging.$anonfun$recordOperation$1(UsageLogging.scala:395)
at com.databricks.logging.UsageLogging.executeThunkAndCaptureResultTags$1(UsageLogging.scala:484)
at com.databricks.logging.UsageLogging.$anonfun$recordOperationWithResultTags$4(UsageLogging.scala:504)
at com.databricks.logging.UsageLogging.$anonfun$withAttributionContext$1(UsageLogging.scala:266)
at scala.util.DynamicVariable.withValue(DynamicVariable.scala:62)
at com.databricks.logging.UsageLogging.withAttributionContext(UsageLogging.scala:261)
at com.databricks.logging.UsageLogging.withAttributionContext$(UsageLogging.scala:258)
at com.databricks.DatabricksMain.withAttributionContext(DatabricksMain.scala:85)
at com.databricks.logging.UsageLogging.withAttributionTags(UsageLogging.scala:305)
at com.databricks.logging.UsageLogging.withAttributionTags$(UsageLogging.scala:297)
at com.databricks.DatabricksMain.withAttributionTags(DatabricksMain.scala:85)
at com.databricks.logging.UsageLogging.recordOperationWithResultTags(UsageLogging.scala:479)
at com.databricks.logging.UsageLogging.recordOperationWithResultTags$(UsageLogging.scala:404)
at com.databricks.DatabricksMain.recordOperationWithResultTags(DatabricksMain.scala:85)
at com.databricks.logging.UsageLogging.recordOperation(UsageLogging.scala:395)
at com.databricks.logging.UsageLogging.recordOperation$(UsageLogging.scala:367)
at com.databricks.DatabricksMain.recordOperation(DatabricksMain.scala:85)
at com.databricks.DatabricksMain.withStartupProfilingData(DatabricksMain.scala:425)
at com.databricks.DatabricksMain.main(DatabricksMain.scala:116)
at com.databricks.backend.daemon.driver.DriverDaemon.main(DriverDaemon.scala)
Caused by: java.lang.NullPointerException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.databricks.dbutils_v1.DBUtilsHolder$$anon$1.invoke(DBUtilsHolder.scala:17)
at com.sun.proxy.$Proxy35.fs(Unknown Source)
at my.custom.listener.LibraryListener.<init>(LibraryListener.scala:19)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.apache.spark.util.Utils$.$anonfun$loadExtensions$1(Utils.scala:3077)
at scala.collection.TraversableLike.$anonfun$flatMap$1(TraversableLike.scala:245)
at scala.collection.mutable.ResizableArray.foreach(ResizableArray.scala:62)
at scala.collection.mutable.ResizableArray.foreach$(ResizableArray.scala:55)
at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:49)
at scala.collection.TraversableLike.flatMap(TraversableLike.scala:245)
at scala.collection.TraversableLike.flatMap$(TraversableLike.scala:242)
at scala.collection.AbstractTraversable.flatMap(Traversable.scala:108)
at org.apache.spark.util.Utils$.loadExtensions(Utils.scala:3066)
at org.apache.spark.SparkContext.$anonfun$setupAndStartListenerBus$1(SparkContext.scala:2810)
at org.apache.spark.SparkContext.$anonfun$setupAndStartListenerBus$1$adapted(SparkContext.scala:2809)
at scala.Option.foreach(Option.scala:407)
at org.apache.spark.SparkContext.setupAndStartListenerBus(SparkContext.scala:2809)
... 33 more
build.gradle
plugins {
id 'scala'
id 'java-library'
}
repositories {
mavenCentral()
}
dependencies {
// Use Scala 2.13 in our library project
implementation 'org.scala-lang:scala-library:2.12.15'
// Crucial Implementation
// https://mvnrepository.com/artifact/com.databricks/dbutils-api
implementation group: 'com.databricks', name: 'dbutils-api_2.12', version: '0.0.5'
implementation group: 'org.slf4j', name: 'slf4j-api', version: '1.7.32'
implementation group: 'org.apache.spark', name: 'spark-core_2.12', version: '3.0.0'
implementation group: 'org.apache.spark', name: 'spark-sql_2.12', version: '3.0.0'
implementation 'com.google.guava:guava:30.1.1-jre'
testImplementation 'junit:junit:4.13.2'
testImplementation 'org.scalatest:scalatest_2.12:3.2.9'
testImplementation 'org.scalatestplus:junit-4-13_2.12:3.2.2.0'
testImplementation group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.32'
testRuntimeOnly 'org.scala-lang.modules:scala-xml_2.12:1.2.0'
api 'org.apache.commons:commons-math3:3.6.1'
}
Thank you for any insights!

Related

Back-end (JVM) Internal error: Failed to generate expression: KtCallExpression

Decompiler tool of my IDE is not working.
Here is my code which I want to decompile:
data class FetchOrdersState(
val orders: List<Order> = listOf(),
val isLoading: Boolean = false,
val error: String = ""
) : OrderState {
companion object {
val Empty = FetchOrdersState()
}
}
This is the error I am getting in the IDE when I visit Tools > Kotlin > Show Kotlin Bytecode
org.jetbrains.kotlin.codegen.CompilationException: Back-end (JVM) Internal error:
Failed to generate expression: KtCallExpression
File being compiled: (20,31) in /Users/.../src/commonMain/kotlin/.../OrderState.kt
The root cause java.lang.IllegalStateException was thrown at: org.jetbrains.kotlin.codegen.state.KotlinTypeMapper$Companion.getPackageMemberContainingClassesInfo(KotlinTypeMapper.kt:1386)
at org.jetbrains.kotlin.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:356)
at org.jetbrains.kotlin.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:314)
at org.jetbrains.kotlin.codegen.ExpressionCodegen.gen(ExpressionCodegen.java:430)
at org.jetbrains.kotlin.codegen.DefaultParameterValueLoader.lambda$static$0(DefaultParameterValueLoader.java:30)
at org.jetbrains.kotlin.codegen.FunctionCodegen.lambda$generateDefaultImplBody$5(FunctionCodegen.java:1278)
at org.jetbrains.kotlin.codegen.ExpressionCodegen.runWithShouldMarkLineNumbers(ExpressionCodegen.java:1559)
at org.jetbrains.kotlin.codegen.FunctionCodegen.generateDefaultImplBody(FunctionCodegen.java:1274)
at org.jetbrains.kotlin.codegen.FunctionCodegen.generateDefaultIfNeeded(FunctionCodegen.java:1203)
at org.jetbrains.kotlin.codegen.ConstructorCodegen.generatePrimaryConstructor(ConstructorCodegen.java:112)
at org.jetbrains.kotlin.codegen.ImplementationBodyCodegen.generateConstructors(ImplementationBodyCodegen.java:457)
at org.jetbrains.kotlin.codegen.ClassBodyCodegen.generateBody(ClassBodyCodegen.java:96)
at org.jetbrains.kotlin.codegen.MemberCodegen.generate(MemberCodegen.java:132)
at org.jetbrains.kotlin.codegen.MemberCodegen.genClassOrObject(MemberCodegen.java:305)
at org.jetbrains.kotlin.codegen.MemberCodegen.genClassOrObject(MemberCodegen.java:289)
at org.jetbrains.kotlin.codegen.PackageCodegenImpl.generateClassesAndObjectsInFile(PackageCodegenImpl.java:119)
at org.jetbrains.kotlin.codegen.PackageCodegenImpl.generateFile(PackageCodegenImpl.java:138)
at org.jetbrains.kotlin.codegen.PackageCodegenImpl.generate(PackageCodegenImpl.java:70)
at org.jetbrains.kotlin.codegen.DefaultCodegenFactory.generatePackage(CodegenFactory.kt:77)
at org.jetbrains.kotlin.codegen.DefaultCodegenFactory.generateModule(CodegenFactory.kt:62)
at org.jetbrains.kotlin.codegen.KotlinCodegenFacade.compileCorrectFiles(KotlinCodegenFacade.java:35)
at org.jetbrains.kotlin.idea.core.KotlinCompilerIde.compile(KotlinCompilerIde.kt:144)
at org.jetbrains.kotlin.idea.internal.KotlinBytecodeToolWindow$Companion.compileSingleFile(KotlinBytecodeToolWindow.kt:272)
at org.jetbrains.kotlin.idea.internal.KotlinBytecodeToolWindow$Companion.getBytecodeForFile(KotlinBytecodeToolWindow.kt:235)
at org.jetbrains.kotlin.idea.internal.KotlinBytecodeToolWindow$UpdateBytecodeToolWindowTask.processRequest(KotlinBytecodeToolWindow.kt:111)
at org.jetbrains.kotlin.idea.internal.KotlinBytecodeToolWindow$UpdateBytecodeToolWindowTask.processRequest(KotlinBytecodeToolWindow.kt:60)
at org.jetbrains.kotlin.idea.util.LongRunningReadTask$1$1.run(LongRunningReadTask.java:115)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:866)
at org.jetbrains.kotlin.idea.util.LongRunningReadTask.lambda$runWithWriteActionPriority$0(LongRunningReadTask.java:235)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:178)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:658)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:610)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:65)
at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:165)
at org.jetbrains.kotlin.idea.util.LongRunningReadTask.runWithWriteActionPriority(LongRunningReadTask.java:235)
at org.jetbrains.kotlin.idea.util.LongRunningReadTask$1.run(LongRunningReadTask.java:110)
at com.intellij.util.RunnableCallable.call(RunnableCallable.java:20)
at com.intellij.util.RunnableCallable.call(RunnableCallable.java:11)
at com.intellij.openapi.application.impl.ApplicationImpl$1.call(ApplicationImpl.java:276)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:668)
at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:665)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:665)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.IllegalStateException: No implClassName for #kotlin.internal.InlineOnly public inline fun <T> listOf(): kotlin.collections.List<T> defined in kotlin.collections[DeserializedSimpleFunctionDescriptor#43dad151]
at org.jetbrains.kotlin.codegen.state.KotlinTypeMapper$Companion.getPackageMemberContainingClassesInfo(KotlinTypeMapper.kt:1386)
at org.jetbrains.kotlin.codegen.state.KotlinTypeMapper$Companion.getPackageMemberOwnerInternalName(KotlinTypeMapper.kt:1369)
at org.jetbrains.kotlin.codegen.state.KotlinTypeMapper$Companion.internalNameForPackageMemberOwner(KotlinTypeMapper.kt:1315)
at org.jetbrains.kotlin.codegen.state.KotlinTypeMapper$Companion.access$internalNameForPackageMemberOwner(KotlinTypeMapper.kt:1283)
at org.jetbrains.kotlin.codegen.state.KotlinTypeMapper.mapOwner(KotlinTypeMapper.kt:163)
at org.jetbrains.kotlin.codegen.state.KotlinTypeMapper.mapOwner(KotlinTypeMapper.kt:142)
at org.jetbrains.kotlin.codegen.state.KotlinTypeMapper.mapToCallableMethod(KotlinTypeMapper.kt:544)
at org.jetbrains.kotlin.codegen.ExpressionCodegen.resolveToCallable(ExpressionCodegen.java:2727)
at org.jetbrains.kotlin.codegen.ExpressionCodegen.invokeFunction(ExpressionCodegen.java:2602)
at org.jetbrains.kotlin.codegen.ExpressionCodegen.invokeFunction(ExpressionCodegen.java:2576)
at org.jetbrains.kotlin.codegen.ExpressionCodegen.visitCallExpression(ExpressionCodegen.java:2470)
at org.jetbrains.kotlin.codegen.ExpressionCodegen.visitCallExpression(ExpressionCodegen.java:125)
at org.jetbrains.kotlin.psi.KtCallExpression.accept(KtCallExpression.java:35)
at org.jetbrains.kotlin.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:332)
... 45 more
This works absolutely fine if I comment out the listOf() line from my data class.

Why does JBehave test run within Android Studio unit test folder, but fail within integration test folder?

I'm new to JBehave and trying to get a simple test running within Android Studio. I've started with a new project (specifying "Add no activity"), modified the app/build.gradle file to include the dependency for JBehave, and added 3 files: app/stories/example.story, IntegrationTestStoryRunner.java and ExampleSteps.java. I can successfully run IntegrationTestStoryRunner when the 2 java files are located in the src/test/java/... folder, but when I move the identical files to the src/androidTest/java/... folder the build fails.
I'm using:
Android Studio v3.1.4 (latest updates as of 9/23/2018)
JBehave Syntax Support plugin v1.62
Running on Windows 10
Here is the example.story file (default created by plugin):
Narrative:
As a user
I want to perform an action
So that I can achieve a business goal
Scenario: scenario description
Given a system state
When I do something
Then system is in a different state
Here is the JBehave Embedder file, IntegrationTestStoryRunner.java (from Test-Driven Java Development - Garcia/Farcic):
package com.pepperhawk.example.jbehave;
import org.jbehave.core.configuration.Configuration;
import org.jbehave.core.configuration.MostUsefulConfiguration;
import org.jbehave.core.io.*;
import org.jbehave.core.junit.JUnitStories;
import org.jbehave.core.reporters.FilePrintStreamFactory;
import org.jbehave.core.reporters.Format;
import org.jbehave.core.reporters.StoryReporterBuilder;
import org.jbehave.core.steps.InjectableStepsFactory;
import org.jbehave.core.steps.InstanceStepsFactory;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class IntegrationTestStoryRunner extends JUnitStories {
#Override
public Configuration configuration() {
return new MostUsefulConfiguration()
.useStoryReporterBuilder(getReporter())
.useStoryLoader(new LoadFromURL());
}
#Override
protected List<String> storyPaths() {
return new StoryFinder().findPaths(
CodeLocations.codeLocationFromPath("").getFile(),
Collections.singletonList("stories/**/*.story"),
new ArrayList<String>(),
"file:"
);
}
#Override
public InjectableStepsFactory stepsFactory() {
return new InstanceStepsFactory(configuration(), new ExampleSteps());
}
private StoryReporterBuilder getReporter() {
return new StoryReporterBuilder()
.withPathResolver(new FilePrintStreamFactory.ResolveToSimpleName())
.withDefaultFormats()
.withFormats(Format.CONSOLE, Format.HTML);
}
}
Here is the ExampleSteps.java file:
package com.pepperhawk.example.jbehave;
import org.jbehave.core.annotations.*;
public class ExampleSteps {
#Given("a system state")
public void givenSystemState() {
}
#When("I do something")
public void whenIDoSomething() {
}
#Then("system is in a different state")
public void thenSystemInDifferentState() {
}
}
And lastly my app/gradle.build file. Only the jbehave line was added at the end:
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.pepperhawk.example.jbehave"
minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
androidTestImplementation "org.jbehave:jbehave-core:4.3.5"
}
I receive two build errors. Here's the shortest:
Program type already present: org.xmlpull.v1.XmlSerializer
Message{kind=ERROR, text=Program type already present: org.xmlpull.v1.XmlSerializer, sources=[Unknown source file], tool name=Optional.of(D8)}
I've truncated the larger error (let me know if you need more):
java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\0.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\1.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\2.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\3.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\4.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\5.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\6.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\7.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\8.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\9.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\10.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\11.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\12.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\13.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\14.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\15.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\16.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\17.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\18.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\19.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\20.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\21.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\22.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\23.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\24.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\25.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\26.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\27.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\28.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\29.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\30.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\33.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\34.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\35.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\40.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\42.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\44.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\45.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\47.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\49.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\50.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\51.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\52.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\53.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\54.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\55.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\56.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\57.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\58.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\59.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\60.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\61.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\62.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\63.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\64.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\65.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\66.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\67.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\68.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\69.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\70.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\71.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\72.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\73.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\74.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\75.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\76.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\77.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\78.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\79.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\80.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\81.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\82.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\83.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\84.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\85.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\86.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\87.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\88.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\89.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\90.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\91.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\92.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\93.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\94.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\95.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\96.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\97.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\98.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\99.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\100.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\101.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\102.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\103.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\104.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\105.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\106.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\107.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\108.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\109.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\112.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\114.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\117.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\118.jar
at com.android.builder.profile.Recorder$Block.handleException(Recorder.java:55)
at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:104)
at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:212)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:46)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:121)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:110)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62)
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:60)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:97)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:87)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:79)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98)
at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:626)
at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:581)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
at java.lang.Thread.run(Thread.java:745)
Caused by: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\0.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\1.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\2.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\3.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\4.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\5.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\6.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\7.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\8.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\9.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\10.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\11.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\12.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\13.jar, C:\Users\Lenny\Projects\SupportProjectsEtc\JBehave\app\build\intermediates\transforms\dexBuilder\androidTest\debug\14.jar,
...
Try something more like this for your StoryPaths:
#Override
protected List<String> storyPaths() {
URL searchLoc = CodeLocations.codeLocationFromClass(this.getClass());
return new StoryFinder().findPaths(searchLoc, Arrays.asList("**/CalcTest.story",
"**/ScrollTest.story",
""),
Arrays.asList("**/excluded*.story"));
}
I haven't looked any further than that in your code, so there might be other issues, but I'm guessing that this is your problem. Obviously, you can replace the array list with whatever files you want to include, this is just one from my Appium project.
I have my info stored in a standard maven file structure with the testrunner itself in src/test/java/(package folders)/testrunners and the stories in src/test/resources/(package folders)
Hope this helps.

Cannot run Spark job with Cassandra driver

build.gradle
plugins {
id 'java'
id 'com.github.johnrengelman.shadow' version '1.2.3'
}
group 'com.hello.aggregation'
version '1.0-SNAPSHOT'
apply plugin: 'java'
apply plugin: 'scala'
apply plugin: 'idea'
sourceCompatibility = 1.8
targetCompatibility = 1.8
configurations {
provided
}
sourceSets {
main {
compileClasspath += configurations.provided
}
}
repositories {
mavenCentral()
}
dependencies {
compile "org.scala-lang:scala-library:$scalaVersion"
compile "org.scala-lang:scala-reflect:$scalaVersion"
compile "org.scala-lang:scala-compiler:$scalaVersion"
compile "org.apache.spark:spark-core_$scalaBase:$sparkVersion"
compile "org.apache.spark:spark-sql_$scalaBase:$sparkVersion"
compile "com.datastax.cassandra:cassandra-driver-core:$cassandraDriverVersion"
compile "com.datastax.spark:spark-cassandra-connector_$scalaBase:$connectorVersion"
compile "org.slf4j:slf4j-api:$slf4jVersion"
compile "mysql:mysql-connector-java:$mySqlConnectorVersion"
testCompile group: 'junit', name: 'junit', version: '4.12'
}
task run(type: JavaExec, dependsOn: classes) {
main = mainClassFile
classpath sourceSets.main.runtimeClasspath
classpath configurations.runtime
}
jar {
classifier = 'all'
manifest {
attributes 'Implementation-Title': title,
'Implementation-Version': version,
'Main-Class': mainClassFile
}
include{sourceSets.main.output.classesDir}
zip64 true
}
shadowJar {
classifier = 'shadow'
append 'reference.conf'
dependencies {
}
zip64 true
}
idea {
module {
// IntelliJ does not know about the standard idiom of provided as used in managing
// uber/shaded jar dependencies. Make it so!
scopes.PROVIDED.plus += [ configurations.provided ]
}
}
gradle.properties
version=1.0.0
scalaBase=2.11
scalaVersion=2.11.4
slf4jVersion=1.7.25
sparkVersion=1.6.3
connectorVersion=1.6.7
cassandraDriverVersion=3.0.7
mySqlConnectorVersion=5.1.37
exception:
17/06/19 16:03:54 INFO BlockManagerMaster: Registered BlockManager
Exception in thread "main" java.lang.NoSuchMethodError: scala.runtime.ObjectRef.zero()Lscala/runtime/ObjectRef;
at com.datastax.spark.connector.cql.CassandraConnector$.com$datastax$spark$connector$cql$CassandraConnector$$createSession(CassandraConnector.scala)
at com.datastax.spark.connector.cql.CassandraConnector$$anonfun$7.apply(CassandraConnector.scala:150)
at com.datastax.spark.connector.cql.CassandraConnector$$anonfun$7.apply(CassandraConnector.scala:150)
at com.datastax.spark.connector.cql.RefCountedCache.createNewValueAndKeys(RefCountedCache.scala:32)
at com.datastax.spark.connector.cql.RefCountedCache.syncAcquire(RefCountedCache.scala:69)
at com.datastax.spark.connector.cql.RefCountedCache.acquire(RefCountedCache.scala:57)
at com.datastax.spark.connector.cql.CassandraConnector.openSession(CassandraConnector.scala:80)
at com.datastax.spark.connector.cql.CassandraConnector.withSessionDo(CassandraConnector.scala:107)
at com.datastax.spark.connector.cql.CassandraConnector.withClusterDo(CassandraConnector.scala:118)
at com.datastax.spark.connector.cql.Schema$.fromCassandra(Schema.scala:330)
at com.datastax.spark.connector.cql.Schema$.tableFromCassandra(Schema.scala:350)
at com.datastax.spark.connector.rdd.CassandraTableRowReaderProvider$class.tableDef(CassandraTableRowReaderProvider.scala:50)
at com.datastax.spark.connector.rdd.CassandraTableScanRDD.tableDef$lzycompute(CassandraTableScanRDD.scala:60)
at com.datastax.spark.connector.rdd.CassandraTableScanRDD.tableDef(CassandraTableScanRDD.scala:60)
at com.datastax.spark.connector.rdd.CassandraTableRowReaderProvider$class.verify(CassandraTableRowReaderProvider.scala:137)
at com.datastax.spark.connector.rdd.CassandraTableScanRDD.verify(CassandraTableScanRDD.scala:60)
at com.datastax.spark.connector.rdd.CassandraTableScanRDD.getPartitions(CassandraTableScanRDD.scala:230)
at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:239)
at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:237)
at scala.Option.getOrElse(Option.scala:120)
at org.apache.spark.rdd.RDD.partitions(RDD.scala:237)
at org.apache.spark.rdd.RDD$$anonfun$distinct$2.apply(RDD.scala:359)
at org.apache.spark.rdd.RDD$$anonfun$distinct$2.apply(RDD.scala:359)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:150)
at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:111)
at org.apache.spark.rdd.RDD.withScope(RDD.scala:316)
at org.apache.spark.rdd.RDD.distinct(RDD.scala:358)
at com.achoo.scala.streambright.SimpleDailyRun$.delayedEndpoint$com$achoo$scala$streambright$SimpleDailyRun$1(SimpleDailyRun.scala:30)
at com.achoo.scala.streambright.SimpleDailyRun$delayedInit$body.apply(SimpleDailyRun.scala:14)
at scala.Function0$class.apply$mcV$sp(Function0.scala:40)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
at scala.App$$anonfun$main$1.apply(App.scala:71)
at scala.App$$anonfun$main$1.apply(App.scala:71)
at scala.collection.immutable.List.foreach(List.scala:318)
Code:
package com.streambright
import java.sql.{Connection, DriverManager}
import com.mysql.jdbc.Driver
import org.apache.spark.rdd.JdbcRDD
import org.apache.spark.{SparkConf, SparkContext}
import com.datastax.spark.connector.toSparkContextFunctions
import org.apache.spark.sql.cassandra.CassandraSQLContext
object SimpleDailyRun extends App {
DriverManager.registerDriver(new Driver())
val config = new SparkConf(true).setAppName("Simple Daily Run")
val sc = SparkContext.getOrCreate(config)
val cc = new CassandraSQLContext(sc)
cc.setKeyspace("achoo")
val conn = DriverManager.getConnection("jdbc:mysql://10.175.190.95/db?useUnicode=yes&characterEncoding=UTF-8&user=user&password=pass")
val mySqlJdbcRDD = new JdbcRDD(sc, () => conn,
"SELECT b.project_id,a.keyword FROM keyword a " +
"JOIN project_keyword b ON a.id = b.keyword_id LIMIT ?, ?",
0, 100000000, 1, r => (r.getInt("project_id"), r.getString("keyword")))
val cassandraRDD = sc.cassandraTable("hello", "instagram_keyword_analytic")
.select("keyword", "relativepath")
.as((_: String, _: String))
.distinct()
mySqlJdbcRDD.saveAsTextFile("/data/MySQL_projectid_keywords_"+System.currentTimeMillis()+".txt")
cassandraRDD.saveAsTextFile("/data/MySQL_projectid_keywords_"+System.currentTimeMillis()+".txt")
}
Cassandra version: cassandra21-2.1.15-1 (DataStax)
Spark version: 1.6.3
Does anybody know how to fix this?
The fix for this problem is to use Scala 2.10 instead of 2.11.

NoSuchMethodError occurs when run spark-streaming job on kafka

I'm use spark-streaming to consume protobuf-formated-messages from kafka.
It works fine while the master was set to "local[2]", but when i change the master url to a real spark cluster's master url, I meet the following exception
Exception in thread "main" org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 20.0 failed 4 times, most recent failure: Lost task 0.3 in stage 20.0 (TID 58, 10.0.5.155): java.lang.NoSuchMethodError: com.google.protobuf.CodedInputStream.readStringRequireUtf8()Ljava/lang/String;
at cn.xiaoman.eagleeye.Agent$Tag.<init>(Agent.java:83)
at cn.xiaoman.eagleeye.Agent$Tag.<init>(Agent.java:44)
at cn.xiaoman.eagleeye.Agent$Tag$1.parsePartialFrom(Agent.java:638)
at cn.xiaoman.eagleeye.Agent$Tag$1.parsePartialFrom(Agent.java:633)
at com.google.protobuf.CodedInputStream.readMessage(CodedInputStream.java:309)
at cn.xiaoman.eagleeye.Agent$Metric.<init>(Agent.java:797)
at cn.xiaoman.eagleeye.Agent$Metric.<init>(Agent.java:718)
at cn.xiaoman.eagleeye.Agent$Metric$1.parsePartialFrom(Agent.java:1754)
at cn.xiaoman.eagleeye.Agent$Metric$1.parsePartialFrom(Agent.java:1749)
at com.google.protobuf.AbstractParser.parsePartialFrom(AbstractParser.java:141)
at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:176)
at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:188)
at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:193)
at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:49)
at cn.xiaoman.eagleeye.Agent$Metric.parseFrom(Agent.java:1058)
at cn.xiaoman.eagleeye.rtmetricprocessor.MetricDeserializer.deserialize(MetricDeserializer.java:25)
at cn.xiaoman.eagleeye.rtmetricprocessor.MetricDeserializer.deserialize(MetricDeserializer.java:14)
at org.apache.kafka.clients.consumer.internals.Fetcher.parseRecord(Fetcher.java:627)
at org.apache.kafka.clients.consumer.internals.Fetcher.parseFetchedData(Fetcher.java:548)
at org.apache.kafka.clients.consumer.internals.Fetcher.fetchedRecords(Fetcher.java:354)
at org.apache.kafka.clients.consumer.KafkaConsumer.pollOnce(KafkaConsumer.java:1000)
at org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:938)
at org.apache.spark.streaming.kafka010.CachedKafkaConsumer.poll(CachedKafkaConsumer.scala:99)
at org.apache.spark.streaming.kafka010.CachedKafkaConsumer.get(CachedKafkaConsumer.scala:70)
at org.apache.spark.streaming.kafka010.KafkaRDD$KafkaRDDIterator.next(KafkaRDD.scala:227)
at org.apache.spark.streaming.kafka010.KafkaRDD$KafkaRDDIterator.next(KafkaRDD.scala:193)
at scala.collection.Iterator$$anon$13.hasNext(Iterator.scala:462)
at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:408)
at scala.collection.Iterator$$anon$13.hasNext(Iterator.scala:461)
at scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:439)
at org.apache.spark.util.collection.ExternalSorter.insertAll(ExternalSorter.scala:192)
at org.apache.spark.shuffle.sort.SortShuffleWriter.write(SortShuffleWriter.scala:63)
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:79)
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:47)
at org.apache.spark.scheduler.Task.run(Task.scala:86)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:274)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Versions:
spark: 2.11-2.0.2
kafka: 2.11-0.10.1.0
protobuf: 3.0.2
Because the task depends on protobuf 3, while the spark runtime depends on another protobuf version.
Solution: Edit build.gradle to relocate com.google.protobuf to another name using 'com.github.johnrengelman.shadow' plugin.
shadowJar {
relocate 'com.google.protobuf', 'shadow.google.protobuf'
}
edit: add full version build.gradle
group 'xxx'
version '1.0-SNAPSHOT'
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'application'
apply plugin: 'com.google.protobuf'
apply plugin: 'com.github.johnrengelman.shadow'
sourceCompatibility = 1.8
buildscript {
repositories {
mavenLocal()
mavenCentral()
jcenter()
}
dependencies {
// ASSUMES GRADLE 2.12 OR HIGHER. Use plugin version 0.7.5 with earlier
// gradle versions
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.0'
classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.3'
}
}
def grpcVersion = '1.0.2'
repositories {
mavenLocal()
mavenCentral()
jcenter()
}
def sparkVersion = '2.0.2'
dependencies {
compile "org.apache.spark:spark-streaming_2.11:${sparkVersion}"
compile "org.apache.spark:spark-streaming-kafka-0-10_2.11:${sparkVersion}"
compile "org.apache.spark:spark-core_2.11:${sparkVersion}"
compile 'com.google.protobuf:protobuf-java:3.1.0'
compile group: 'org.mongodb', name: 'mongo-java-driver', version: '3.4.0'
testCompile 'junit:junit:4.11'
}
protobuf {
protoc {
// The version of protoc must match protobuf-java. If you don't depend on
// protobuf-java directly, you will be transitively depending on the
// protobuf-java version that grpc depends on.
artifact = 'com.google.protobuf:protoc:3.0.2'
}
// plugins {
// grpc {
// artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}"
// }
// }
// generateProtoTasks {
// all()*.plugins {
// grpc {
// // To generate deprecated interfaces and static bindService method,
// // turn the enable_deprecated option to true below:
// option 'enable_deprecated=false'
// }
// }
// }
}
idea {
module {
// Not using generatedSourceDirs because of
// https://discuss.gradle.org/t/support-for-intellij-2016/15294/8
sourceDirs += file("${projectDir}/build/generated/source/proto/main/java");
}
}
shadowJar {
zip64 true
relocate 'com.google.protobuf', 'shadow.google.protobuf'
}
mainClassName = "xxx.Main"

Gradle nebula.test fails to download Gradle distribution

I'm writing my first Gradle plugin. It's functionally working pretty well, and I have a couple of unit tests working. I'm now starting to set up integration tests using nebula.test. After resolving a simple Spock version number mismatch problem (I was loading 1.0, but nebula.test still uses 0.7) I'm now trying to run my first test. When I run it from Eclipse or from the command line, I see it fail with the following stacktrace:
org.gradle.api.GradleException: Build aborted because of an internal error.
at nebula.test.functional.internal.DefaultExecutionResult.rethrowFailure(DefaultExecutionResult.groovy:95)
at nebula.test.IntegrationSpec.runTasksSuccessfully(IntegrationSpec.groovy:234)
at com.att.opnfv.yang.gradle.YangPluginIntegSpec.simple(YangPluginIntegSpec.groovy:14)
Caused by: org.gradle.tooling.GradleConnectionException: Could not install Gradle distribution from 'https://services.gradle.org/distributions/gradle-2.3-bin.zip'.
at org.gradle.tooling.internal.consumer.DistributionFactory$ZippedDistribution$1.call(DistributionFactory.java:128)
at org.gradle.tooling.internal.consumer.DistributionFactory$ZippedDistribution$1.call(DistributionFactory.java:116)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
at org.gradle.tooling.internal.consumer.BlockingResultHandler.getResult(BlockingResultHandler.java:46)
at org.gradle.tooling.internal.consumer.DefaultBuildLauncher.run(DefaultBuildLauncher.java:71)
at nebula.test.functional.internal.toolingapi.BuildLauncherBackedGradleHandle.run(BuildLauncherBackedGradleHandle.groovy:78)
at nebula.test.IntegrationSpec.runTasks(IntegrationSpec.groovy:246)
at nebula.test.IntegrationSpec.runTasksSuccessfully(IntegrationSpec.groovy:232)
... 1 more
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:579)
at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:618)
at sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:160)
at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:432)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)
at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:275)
at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:371)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:932)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1300)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
at org.gradle.wrapper.Download.downloadInternal(Download.java:58)
at org.gradle.wrapper.Download.download(Download.java:44)
at org.gradle.tooling.internal.consumer.DistributionFactory$ProgressReportingDownload.download(DistributionFactory.java:177)
at org.gradle.wrapper.Install$1.call(Install.java:59)
at org.gradle.wrapper.Install$1.call(Install.java:46)
at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:65)
at org.gradle.wrapper.Install.createDist(Install.java:46)
at org.gradle.tooling.internal.consumer.DistributionFactory$ZippedDistribution$1.call(DistributionFactory.java:122)
at org.gradle.tooling.internal.consumer.DistributionFactory$ZippedDistribution$1.call(DistributionFactory.java:116)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
I imagine that most people will immediately suggest that I should configure my proxy. I'm pretty sure I've already done that. My Gradle build wouldn't work at all if I wasn't able to download artifacts from the internet. I put the relevant proxy config settings in my "~/.gradle/gradle.properties". I can also download this zip file in my browser, and I can also get it with "wget" from the same shell I ran the build from. The result from "wget" is interesting, however. When I run this, I see that it gets an intermediate "301 Moved Permanently" result, which points to "https://downloads.gradle.org/distributions/gradle-2.3-bin.zip".
Is there some part of this distribution download process that doesn't properly handle 301s, or do I have to configure that somehow?
Update:
Here's my build.gradle file:
buildscript {
repositories {
jcenter()
mavenCentral()
}
}
apply plugin: 'groovy'
apply plugin: 'java-gradle-plugin'
apply plugin: 'maven'
repositories {
mavenCentral()
jcenter()
maven { url "http://oss.sonatype.org/content/repositories/releases/" }
maven {
url "http://nexus.opendaylight.org/content/repositories/opendaylight.snapshot"
}
maven {
url "http://nexus.opendaylight.org/content/repositories/opendaylight.release"
}
}
dependencies {
compile "org.codehaus.groovy:groovy-all:2.3.9"
compile gradleApi()
}
sourceCompatibility = 1.7
group = 'com.att.opnfv.yang'
version = '1.0.0-SNAPSHOT'
sourceSets {
integTest {
groovy.srcDir file("src/integTest/groovy")
resources.srcDir file("src/integTest/resources")
}
}
dependencies {
integTestCompile sourceSets.main.output
integTestCompile configurations.testCompile
integTestCompile sourceSets.test.output
integTestRuntime configurations.testRuntime
testCompile( 'com.netflix.nebula:nebula-test:2.2.0' ) {
exclude module: 'groovy-all'
}
}
task integTest(type: Test) {
testClassesDir = sourceSets.integTest.output.classesDir
classpath = sourceSets.integTest.runtimeClasspath
}
check.dependsOn -= integTest
And here's the first incomplete spec I'm trying to use with nebula test:
import nebula.test.IntegrationSpec
import nebula.test.functional.ExecutionResult
class YangPluginIntegSpec extends IntegrationSpec {
def 'simple'() {
writeHelloWorld("com.example")
buildFile << '''
applyPlugin('yang')
'''.stripIndent()
when:
ExecutionResult result = runTasksSuccessfully('build')
then:
println result
}
}

Resources