'collect' 操作未在 Spark 独立应用程序的驱动程序 window 中显示结果
'collect' action not displaying result in driver window for Spark standalone application
我在本地系统上使用 Spark 1.4.0。每当我创建一个 RDD 并通过 Spark 的 Scala shell 对其调用 collect 时,它都能正常工作。但是当我创建一个独立的应用程序并在 RDD 上调用 'collect' 操作时,我看不到结果,尽管 运行 期间的 Spark 消息说已经为驱动程序设置了一定数量的字节: -
INFO Executor: Finished task 0.0 in stage 0.0 (TID 0). 1991 bytes result sent to driver
INFO Executor: Finished task 1.0 in stage 0.0 (TID 1). 1948 bytes result sent to driver
这是代码:-
object Test
{ def main(args:Array[String])
{
val conf = new SparkConf()
val sc = new SparkContext(conf)
val rdd1 = sc.textFile("input.txt")
val rdd2 = rdd1.map(_.split(",")).map(x=>( (x(0),x(1)) ))
rdd2.collect
}
}
如果我将最后一条语句更改为以下内容,它会显示结果:-
rdd2.collect.foreach(println)
所以问题是,为什么只调用 'collect' 不打印任何东西?
collect
本身在控制台应用程序上不会显示任何内容,因为它所做的只是 return 数据。你必须做一些事情来显示它,就像你在 foreach(println)
上做的那样。或者,对它做一些一般性的事情,比如将它保存到磁盘。
现在,如果您要 运行 spark-shell
中的代码(减去 SparkContext
创建),那么您确实会始终看到输出* 作为 shell调用return编辑的对象的toString
。
*请注意 toString
与 foreach(println)
不同,因为 shell 会在某些时候 运行 匹配
我在本地系统上使用 Spark 1.4.0。每当我创建一个 RDD 并通过 Spark 的 Scala shell 对其调用 collect 时,它都能正常工作。但是当我创建一个独立的应用程序并在 RDD 上调用 'collect' 操作时,我看不到结果,尽管 运行 期间的 Spark 消息说已经为驱动程序设置了一定数量的字节: -
INFO Executor: Finished task 0.0 in stage 0.0 (TID 0). 1991 bytes result sent to driver
INFO Executor: Finished task 1.0 in stage 0.0 (TID 1). 1948 bytes result sent to driver
这是代码:-
object Test
{ def main(args:Array[String])
{
val conf = new SparkConf()
val sc = new SparkContext(conf)
val rdd1 = sc.textFile("input.txt")
val rdd2 = rdd1.map(_.split(",")).map(x=>( (x(0),x(1)) ))
rdd2.collect
}
}
如果我将最后一条语句更改为以下内容,它会显示结果:-
rdd2.collect.foreach(println)
所以问题是,为什么只调用 'collect' 不打印任何东西?
collect
本身在控制台应用程序上不会显示任何内容,因为它所做的只是 return 数据。你必须做一些事情来显示它,就像你在 foreach(println)
上做的那样。或者,对它做一些一般性的事情,比如将它保存到磁盘。
现在,如果您要 运行 spark-shell
中的代码(减去 SparkContext
创建),那么您确实会始终看到输出* 作为 shell调用return编辑的对象的toString
。
*请注意 toString
与 foreach(println)
不同,因为 shell 会在某些时候 运行 匹配