scala - 如何在intelliJ中调试scala spark代码
问题描述
我是 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
当我检查我正在做的火花工作时,没有主要方法。
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如此不同,谁能告诉我如何调试它?
解决方案
在 Scala 中有不同的方法来定义一个主类。一种是在 中定义一个 main 方法object
,类似于 Java。另一种是扩展App
特征,只需将应用程序代码直接写入类中,就像DailyExport
在您的示例中所做的那样。所以你应该可以像主类一样正常运行这个类,并且你还应该在 IntelliJ 中的类旁边看到一个“运行”图标(不是超类中的 main 方法,这是App
trait 的实现细节)。
如果您以这种方式运行它,但仍然出现错误,则您可能遇到了 IntelliJ 中的错误。尝试再次运行它,可能在切换窗口并检查编译输出是否确实是它应该在的位置之后。
推荐阅读
- .net - 如何修复 net::ERR_HTTP2_PROTOCOL_ERROR
- r - 每次 id1 在 id3 的字符串中时,将 id2 部分放在新列中
- java - 使用 Sparklauncher 调用 Spring Boot 应用程序的特定服务类或控制器方法
- scala - 在 Shapeless 中添加两个以上的联产品
- ssh - ssh 今天不会使用公钥登录(!) - 调试会给出奇怪的输出
- python - 将 robots.txt 中的多个用户代理与 Scrapy 匹配
- php - 如何在包含 include('xyz.php') 的目录中包含 php 文件;从另一个目录?
- eclipse - Eclipse Text Editor 背景颜色似乎被当前主题覆盖
- bash - 如何使用 Apple Script 关闭终端窗口
- python - 我可以按下混淆矩阵中的一个单元格从而打开一个文件吗?