Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 在主类中调用对象_Scala_Apache Spark - Fatal编程技术网

Scala 在主类中调用对象

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 =

关于调用对象并从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 = 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方法)