Как я могу добавить классы или банки при подключении к уже существующему кластеру Spark? - PullRequest
0 голосов
/ 07 июня 2018

Я пишу программу, которая обращается к кластеру Spark в качестве клиента.Он подключается так:

val sc = new SparkContext(new SparkConf(loadDefaults = false)
  .setMaster(sparkMasterEndpoint)
  .setAppName("foo")
  .set("spark.cassandra.connection.host", cassandraHost)

  .setJars(Seq("target/scala-2.11/foo_2.11-1.0.jar"))
)

И этот контекст затем используется для запуска операций в Spark.Однако любые лямбда / анонимные функции, которые я использую в своем коде, не могут работать на Spark.Например, у меня может быть:

val groupsDescription = sc.someRDD()
  .groupBy(x => x.getSomeString())
  .map(x => x._1 + " " + x._2.count(_ => true))

Это возвращает лениво оцененный СДР, но когда я пытаюсь извлечь какое-то значение из этого СДР, я получаю это исключение от Spark:

java.lang.ClassNotFoundException: my.app.Main$$anonfun$groupify$1$$anonfun$2$$anonfun$apply$1

Несмотря на то, что я поставил файл jar своего приложения в Spark.Я даже вижу строку журнала (в моем приложении, а не в моем искровом кластере), говорящую мне, что файл jar был загружен следующим образом:

[info] o.a.s.SparkContext - Added JAR target/scala-2.11/foo_2.11-1.0.jar at spark://192.168.51.15:53575/jars/foo_2.11-1.0.jar with timestamp 1528320841157

Я нигде не могу найти абсолютно НИЧЕГО по этому вопросу, и это ведет меняпсих!Как никто больше не сталкивался с этой проблемой?Все связанные результаты, которые я вижу, касаются объединения ваших jar-файлов для использования с spark-submit, что не то, что я делаю, у меня есть отдельное приложение, которое подключается к независимому искровому кластеру.Это просто не поддерживается?Что еще я мог упустить?Что еще может быть причиной этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...