как отлаживать Scala-искровой код в IntelliJ - PullRequest
0 голосов
/ 22 февраля 2019

Я новичок в Scala и Spark, и в настоящее время работаю над проектом Scala Spark Job, меня разочаровало одно: я не знаю, как отлаживать код в IntelliJ, как я делал с Java.

после того, как я импортировал проект scala, я заметил одну вещь: папка spark-jobs не была помечена как папка с исходным кодом, хотя некоторые другие подпапки в том же модуле продаются как папка с исходным кодом.

-- utility (marked as source code folder)
   -- event-sender (marked as source code folder)
   -- spark-jobs (not marked as source code folder)
      -- src
         --main
           -- resources
           -- scala
              -- com
                -- example
                   -- spark
                      -- jobs

, когда я проверил задание на искру, над которым я работаю, основного метода не существует.

class DailyExport(
    env: String,
    )(implicit sc: SparkContext, sqlContext: SQLContext, logger: SparkJobLogger)
    extends JobAudit
    with PartitionedWriter {

  def run(): Unit = ...

object DailyExport extends App with SparkJobParameters {

  {
    for {
      env          <- getStringParameter("environment", 0, args)
    } yield {
      val jobConfig               = SparkJobConfig.fromConfig.exportConfig
      ...

      new DailyExport(
        jobConfig = jobConfig
      ).run()
    }
  }.fold(
    error => {
      println(s"Some provided parameters are wrong: $error")
      sys.exit(-1)
    },
    identity
  )
}

, однако есть основной метод, определенный в 'App'

trait App extends DelayedInit {
...
@deprecatedOverriding("main should not be overridden", "2.11.0")
  def main(args: Array[String]) = {
    this._args = args
    for (proc <- initCode) proc()
    if (util.Properties.propIsSet("scala.time")) {
      val total = currentTime - executionStart
      Console.println("[total " + total + "ms]")
    }
  }

затем я щелкнул правой кнопкой мыши на задании, над которым я работаю, и выбрал «Выполнить ..», он пожаловался

'Error: Could not find or load main class com.exmaple.spark.jobs.DailyExport'

, это так сильно отличается от Java, может кто-нибудь сказать мне, какотладить это?

Ответы [ 3 ]

0 голосов
/ 22 февраля 2019

Пожалуйста, проверьте целевые папки, которые создаются IntelliJ.Убедитесь, что структура пакета сохраняется.

Если проблема не устранена, попробуйте выполнить чистую сборку.

0 голосов
/ 23 февраля 2019

IntelliJ IDEA имеет собственный отладчик для отладки scala.Вы можете использовать отладчик INTELLIJ IDEA или оболочку sbt для устранения проблем.

Дополнительная информация здесь.

0 голосов
/ 22 февраля 2019

В Scala есть разные способы определения основного класса.Одним из них является определение основного метода в object, аналогичного Java.Другой - расширить черту App и просто написать код приложения прямо в классе, как это было сделано с DailyExport в вашем примере.Таким образом, вы должны иметь возможность нормально запускать этот класс как основной класс, и вы также должны видеть значок «Выполнить» рядом с классом в IntelliJ (не основной метод в суперклассе, который является подробностью реализации Apptrait).

Если вы запустите его таким образом, и вы все равно получите ошибку, возможно, вы столкнетесь с ошибкой в IntelliJ.Попробуйте запустить его снова, возможно, после переключения окон и проверки того, что вывод компиляции действительно там, где он должен быть.

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