Scala 在主类中调用对象
关于调用对象并从main运行它的快速问题只需要最后一个命令Scala 在主类中调用对象,scala,apache-spark,Scala,Apache Spark,关于调用对象并从main运行它的快速问题只需要最后一个命令val op=df.coalesce(1).write.mode(“overwrite”).format(“csv”).save(“report”)就可以从主类调用 如何初始化对象实例并运行以写入csv def run(implicit context: Context): Unit = { val timer = Timer.start() //not working val newRep =
val op=df.coalesce(1).write.mode(“overwrite”).format(“csv”).save(“report”)
就可以从主类调用
如何初始化对象实例并运行以写入csv
def run(implicit context: Context): Unit = {
val timer = Timer.start()
//not working
val newRep = Report_Adhoc
val d = newRep.tab.toDF()
val op = d.coalesce(1).write.mode("overwrite").format("csv").save("report")
println(s"pipeline complete in [${timer.elapsedTime()}]")
}
主类是this^,但它引发空点异常
object Report_Adhoc extends App with TransientLogger{
// code not including too verbose
val tab =
counts
.filter(c => c._1.id.nonEmpty && c._2.id.nonEmpty)
.map(c => (c._1, c._2, c._3, c._3.values.sum))
.sort($"_4".desc)
.map(count =>
row(
count._1.id, count._1.label,
count._2.id, count._2.label,
count._3(CITE), count._3(CROSS), count._3(MANUAL),
count._3(RECIPROCAL), count._3(TRANSITIVE), count._3(FAMILY),
count._4
)
)
val df = tab.toDF()
val op = df.coalesce(1).write.mode("overwrite").format("csv").save("report")
}看看这个:
另外,不要在名称中加下划线。不要重用主类/对象。最后但并非最不重要的一点是,尽量减少复制,而不是像这样粘贴大块代码。我削减了我刚才认为可以做到的内容。这些链接没有帮助:/@dedpo如果你仔细阅读,
delayednit
,它会有帮助。您正在重用一个应用程序
,它是DelayedInit
的一个子序列,这意味着您的字段在没有显式调用DelayedInit
的情况下不会初始化。正如我所说的,您不应该一开始就编写这样的代码。的可能重复(TL;DR:不要将App trait用于运行Spark,而是用老式的方式声明main方法)