Я пытаюсь перейти от настройки моего приложения Spark от использования Spark v1 к v2. В v1 я бы использовал Spark Context и Spark Config для инициализации. Однако, согласно последней документации для Spark v2 (руководство по быстрому запуску), я должен использовать Spark Session, и рекомендуется, чтобы конфигурация передавалась из cmd с помощью spark-submit (все, что я упомянул, показано в нижней части этой страницы. : https://spark.apache.org/docs/latest/quick-start .html).

Ниже мое приложение с закомментированным материалом Spark Session (v2), показывающим, как я буду запускать вещи для v1. Если я запустил его таким образом, я получаю сообщение об ошибке «не удалось инициализировать контекст Spark». Затем, если я переставляю свои комментарии, чтобы запускать что-то для Spark Session (v2), и запускаю его, упаковывая приложение как JAR и используя spark-submit в cmd (согласно тому же руководству, которое уже цитировалось выше), я получаю сообщение об ошибке : "Невозможно загрузить основной класс из файла JAR: / C: /"

Я меняю свою переменную SPARK_HOME так, чтобы она указывала на правильные версии, и перехожу на соответствующую версию в файле сборки.

Это приложение:

import org.apache.spark.{SparkContext, SparkConf}
import org.apache.spark.sql.SparkSession

object Pack {
  def main(args: Array[String]) {

  val conf = new SparkConf().setMaster("local[*]").setAppName("Pack")
  .set("spark.executor.memory", "2g")
  val sc = new SparkContext(conf)

  /* val spark = SparkSession.builder.appName("PackTest").getOrCreate() */

  val logFile = "C:/Spark/spark-2.2.0-bin-hadoop2.7/bin/README.md"

  val logData = sc.textFile(logFile).cache()
  /*  val logData = spark.read.textFile(logFile).cache()  */

  val numAs = logData.filter(line => line.contains("a")).count()
  val numBs = logData.filter(line => line.contains("b")).count()
  println(s"Lines with a: $numAs, Lines with b: $numBs")

  /* spark.stop() */
  }
 }

Это файл сборки sbt:

name := "Pack"

version := "1.0"

scalaVersion := "2.11.8"

libraryDependencies += "org.apache.spark" %% "spark-core" % "1.6.1" /* 2.2.0 
when trying sparksession */

libraryDependencies += "org.apache.spark" %% "spark-sql" % "1.6.1" /* 2.2.0 
when trying sparksession */
1
Christopher Mills 6 Авг 2017 в 12:12
Попробуйте использовать%, предоставленный в зависимостях искры
 – 
aclowkay
6 Авг 2017 в 12:16
Первая часть проблемы имела простое решение: убедитесь, что папка, в которой находится приложение, определена как папка src (Intellij). Итак, разобрались с подходом v1. Однако я все еще получаю ту же ошибку «невозможно загрузить класс ...» при попытке запустить с помощью spark-submit в cmd. ... Я также добавил% "provided" к зависимостям искры.
 – 
Christopher Mills
6 Авг 2017 в 12:34

1 ответ

Лучший ответ

Хорошо, решено. Решение для v1 уже упоминалось в моем комментарии.

Для v2 я следовал краткому руководству по началу работы с буквой, за исключением одного: все сводилось к перемещению класса в папку src с именем scala вместо scala-2.11 (Intellij). Я также выполнил перестройку, но не знаю, подействовало ли это.

Кажется тривиальным, но проблема решена.

1
Christopher Mills 6 Авг 2017 в 13:20