如何在intelliJ

时间:2019-02-22 06:26:37

标签: scala intellij-idea

我是Scala和Spark的新手,目前正在从事Scala Spark作业项目,令我沮丧的是,我不知道如何像在Java中那样调试IntelliJ中的代码。

在我导入了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

当我检查正在处理的Spark作业时,没有主要方法。

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
  )
}

但是在“应用”中定义了一种主要方法

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 :(得分:0)

在Scala中,有多种定义主类的方法。一种是在object中定义主要方法,类似于Java。另一个是扩展App特质,就像在示例中使用DailyExport一样,将应用程序代码直接写入类中。因此,您应该能够像主类一样正常运行该类,并且还应该在IntelliJ中的类旁边看到一个“运行”图标(不是超类中的main方法,它是{{1的实现细节}}特性。

如果以这种方式运行它,但仍然收到错误,则可能是您在IntelliJ中遇到了a bug。尝试再次运行它,可能是在切换窗口并检查编译输出确实在预期的位置之后。

答案 1 :(得分:0)

请检查IntelliJ生成的目标文件夹。确保包结构保持不变。

如果问题仍然存在,请尝试进行全新构建。

答案 2 :(得分:0)

IntelliJ IDEA拥有自己的调试器,用于调试scala。您可以使用INTELLIJ IDEA调试器或sbt shell调试问题。

更多信息为here.