Метод setJars () при запуске приложения Spark SQL из IDE - PullRequest
0 голосов
/ 04 сентября 2018

Я создаю Spark Sql Application и хочу запустить его на удаленном спарк-кластере с моей локальной машины с помощью моей IDE. Я знаю, что я должен установить какую-то опцию при создании объекта SparkConf, что-то вроде этого:

SparkConf conf = new SparkConf()
.setMaster("spark://SPARK-MASTER-ADDRESS:7077")
.set("spark.driver.host","my local IP Address")
.setJars(new String[]{"build\\libs\\spark-test-1.0-SNAPSHOT.jar"})
.setAppName("APP-NAME");

Это работает из IDE, и все в порядке ,

но мои вопросы:

1) Нужно ли пересобирать jar-файл моего приложения и устанавливать его путь к методу setJars, каждый раз, когда я что-то меняю? Я видел, что на некоторых форумах было сказано: вам нужно будет собирать банку каждый раз, когда вы что-то меняете. но каждый раз выглядит сложно перестроить jar-файл приложения. Есть ли лучший способ для этого?

2) Почему иногда нет необходимости использовать метод setJars, хотя я запускаю программу через IDE? Например, когда я не использую лямбда-функцию в моем коде, нет необходимости устанавливать функцию setjars. Просто предположим, что у меня есть класс человека, у которого есть два поля: CustomerNo, AccountNo. Когда я использую в своем коде функцию lamba (personDS - это набор данных объекта person):

personDS.filter(f -> f.getCustomerNo().equals("001")).show();

возникает следующая ошибка:

java.lang.ClassCastException: cannot assign instance of scala.collection.immutable.List$SerializationProxy to field org.apache.spark.rdd.RDD.org$apache$spark$rdd$RDD$$dependencies_ of type scala.collection.Seq in instance of org.apache.spark.rdd.MapPartitionsRDD

но когда я не использую функцию lamba в своем коде, вот так:

personDS.filter(col("customerNo").equalTo(001)).show();

Ошибка отсутствует. Итак, почему это случилось? Почему я должен использовать setJars, когда я использую лямбда-функцию? Когда я должен использовать setJars, а когда нет?

1 Ответ

0 голосов
/ 04 сентября 2018

Итак, я предполагаю, что вы не используете spark-submit средство и запускаете программу spark прямо из вашей IDE.

Ниже приведен мой ответ на ваш первый вопрос:

1) Нужно ли пересобирать jar-файл моего приложения, каждый раз, когда я что-то меняю? - ДА, чтобы развернуть ваши изменения, вам нужно собирать jar каждый раз, когда вы вносите изменения в код. Я использую maven для того же.

для второго вопроса:

Я думаю, что всякий раз, когда вы выполняете какую-либо операцию с картой, используя лямбду, которая ссылается на методы / классы вашего проекта, вы должны указывать их в качестве дополнительного jar.

...