Передайте аргументы классу в интеграционных тестах Spark - PullRequest
0 голосов
/ 14 января 2019

У меня есть простое параметризованное искровое приложение, которое содержит такую ​​строку для передаваемых параметров:

val dataFromFile = readFile(spark.sparkContext, args(0))

Итак, я написал тест на интеграцию для него. В этом тесте я создаю Kubernetes CRD, который, в свою очередь, запускает приложение spark - основной файл класса приложения и местоположение jar-файла определяются. Проблема в том, что когда я запускаю эти тесты, я получаю такую ​​ошибку:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at example.SparkExample$.main(SparkExample.scala:37)
    at example.SparkExample.main(SparkExample.scala)
    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 org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)
    at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:846)
    at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:167)
    at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:194)
    at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:86)
    at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:921)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:932)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

Ошибка указывает на строку с аргументом (который я определил выше). Поэтому проблема в том, что я не передаю аргументы классу должным образом. Итак, как я могу запустить эти тесты, если я хочу передать различные имена файлов для тестов в приложение?

Вот все методы испытаний:

  override def beforeAll(): Unit = {
    val customObjectBody = testsUtils.convertYamlToJson(sparkAppYamlFileName)

    val sparkAppCreation = apiInstance.createNamespacedCustomObject(crdGroup, crdVersion, crdNamespace, crdPlural, customObjectBody,"false")
  }


  test("Read file from resources does not throw Exception"){
    noException should be thrownBy testsUtils.getResourceLines(testFileName)
  }


  test("Read file from resources throws InvalidInputException wrong filename"){
    an[NullPointerException] should be thrownBy testsUtils.getResourceLines(testWrongFileName)
  }
...