Azure Synapse及Databricks中Scala代码未输出预期内容的问题排查
问题原因及解决方法
问题原因
在Azure Synapse或Databricks的Notebook交互式环境中,Scala代码的执行逻辑和传统本地编译运行不同:仅仅定义包含main方法的object,只会让解释器返回对象已定义的确认信息(即defined object Geeks),不会自动触发执行main方法。因为Notebook默认只执行代码的定义部分,不会像传统Scala项目那样自动寻找并运行主类的main方法。
解决方法
有三种简单的解决方式,任选其一即可:
方式一:手动调用main方法
在定义完object后,直接调用其main方法,传入空参数数组:
object Geeks { // Main method def main(args: Array[String]) { println("Hello, World!") } } // 手动调用main方法 Geeks.main(Array.empty[String])
方式二:改用脚本式写法(无需object包裹)
Notebook支持直接执行Scala表达式,不需要封装成对象,直接写执行代码即可:
println("Hello, World!")
如果需要保留main方法结构,也可以写成:
def main(args: Array[String]) { println("Hello, World!") } // 调用main方法 main(Array.empty[String])
方式三:使用Scala 3+的@main注解(推荐)
如果环境支持Scala 3及以上版本,可以用@main注解定义入口方法,Notebook会自动执行该方法:
@main def Geeks(): Unit = { println("Hello, World!") }
内容的提问来源于stack exchange,提问作者nam
相关产品推荐
相关产品推荐

