#java #scala #apache-spark #jar #spark-shell
#java #scala #apache-spark #jar #spark-shell
Вопрос:
Я начал изучать spark 2 дня назад. Итак, я довольно новичок в этом. Мой вариант использования связан с доступом к функции java, присутствующей во внешнем jar в моем коде scala, который я пишу в spark-shell. Но я думаю, что я неправильно загружаю свой jar. Вот что я делаю
spark-shell --master local[2] --jars pathToJarsWithComma --conf="spark.driver.extraClassPath=pathToJarsWithColon" --conf="spark.executor.extraClassPath=pathToJarsWithColon"
Вот как я запускаю свою spark-shell с передачей всех необходимых jars. И всякий раз, когда я пытаюсь вызвать статическую функцию Java, например :
rdd1.collect.foreach(a=>MyClass.myfuncttion(a))
Я получаю сообщение об ошибке как :
<console>:26: error: not found: value MyClass
Я хочу знать, правильно ли я понимаю. Можем ли мы использовать функции Java в spark, загрузив внешние jars. Если да, то что я здесь делаю не так. Пожалуйста, укажите.
Комментарии:
1. Вы импортировали это? Сначала вам нужно импортировать класс с помощью
import my.package.MyClass
(my.package
, конечно, example).2. Вы уверены, что передаваемый вами jar содержит класс, на который вы ссылаетесь?
3. Да, у меня есть класс, присутствующий в jar. Я импортировал пакет следующим образом:
import my.package._
надеясь, что все классы в этом пакете будут загружены. Но я получаю ту же ошибку, о которой упоминал.
Ответ №1:
Мы можем загружать функции Java в Spark, загружая внешние jars. Я не уверен, нужны ли вам конфы, которые вы добавили в конце, чтобы заставить это работать. Что касается меня, я попробовал следующее, чтобы протестировать загрузку jar в оболочку spark.
./bin/spark-shell --master <spark url> --jars /home/SparkBench/Terasort/target/jars/guava-19.0-rc2.jar
После этого в командной строке я попытался получить доступ к полю из класса в jar.
scala> import com.google.common.primitives.UnsignedBytes
import com.google.common.primitives.UnsignedBytes
scala> UnsignedBytes.MAX_POWER_OF_TWO
res0: Byte = -128
Как вы можете видеть, я смог получить доступ к полям из внешнего jar. Вы также можете проверить, можете ли вы получить доступ к классу с помощью простого поля из него.