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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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中的extends from App和object contain main方法之间的差异_Scala_Apache Spark - Fatal编程技术网

scala中的extends from App和object contain main方法之间的差异

scala中的extends from App和object contain main方法之间的差异,scala,apache-spark,Scala,Apache Spark,我编写了示例spark scala程序,用于从dataframe创建json元素列表。当我使用main方法执行时,它返回空列表,但当我在没有扩展应用程序的对象的情况下执行时,它返回包含记录的列表。 扩展应用程序和scala对象中的main方法有什么区别 object DfToMap { def main(args: Array[String]): Unit = { val spark: SparkSession = SparkSession.builder() .appName("Rnd") .

我编写了示例spark scala程序,用于从dataframe创建json元素列表。当我使用main方法执行时,它返回空列表,但当我在没有扩展应用程序的对象的情况下执行时,它返回包含记录的列表。 扩展应用程序和scala对象中的main方法有什么区别

object DfToMap {
def main(args: Array[String]): Unit = {
val spark: SparkSession = SparkSession.builder()
.appName("Rnd")
.master("local[*]")
.getOrCreate()
import spark.implicits._

val df = Seq(
(8, "bat"),
(64, "mouse"),
(27, "horse")
).toDF("number", "word")

val json = df.toJSON
val jsonArray = new util.ArrayList[String]()
json.foreach(f => jsonArray.add(f))
print(jsonArray)
}
}
它将返回空列表 但下面的程序给了我一个记录列表

object DfToMap extends App{
val spark: SparkSession = SparkSession.builder()
.appName("Rnd")
.master("local[*]")
.getOrCreate()
import spark.implicits._

val df = Seq(
(8, "bat"),
(64, "mouse"),
(27, "horse")
).toDF("number", "word")

val json = df.toJSON
val jsonArray = new util.ArrayList[String]()
json.foreach(f => jsonArray.add(f))
print(jsonArray)

}

TL;DR两个代码段都不是正确的Spark程序,但其中一个代码段比另一个代码段更不正确

您犯了两个错误,这两个错误都在介绍性Spark材料中解释过

  • 由于其性质,Spark不支持扩展应用程序的应用程序

    请注意,应用程序应该定义main()方法,而不是扩展scala.App。scala.App的子类可能无法正常工作

  • Spark不提供全局共享内存,因此不支持修改全局对象为闭包-


谢谢用户10095367。我试图理解为什么spark的行为会发生变化