scala & Spark - ArrayBuffer 不追加
scala & Spark - ArrayBuffer does not append
我是 Scala 和 Apache Spark 的新手,一直在尝试一些在线示例。
我正在使用 scala.collection.mutable.ArrayBuffer 来存储形式为 (Int,Array[String]) 的元组列表。我正在创建一个 ArrayBuffer,然后逐行解析文本文件并将每一行中的所需数据附加到 ArrayBuffer。
代码没有编译错误。但是当我在附加它的块之外访问 ArrayBuffer 时,我无法获取内容并且 ArrayBuffer 始终为空。
我的代码如下-
val conf = new SparkConf().setAppName("second")
val spark = new SparkContext(conf)
val file = spark.textFile("\Desktop\demo.txt")
var list = scala.collection.mutable.ArrayBuffer[(Int, Array[String])]()
var count = 0
file.map(_.split(","))
.foreach { a =>
count = countByValue(a) // returns an Int
println("count is " + count) // showing correct output "count is 3"
var t = (count, a)
println("t is " + t) // showing correct output "t is (3,[Ljava.lang.String;@539f0af)"
list += t
}
println("list count is = " + list.length) // output "list count is = 0"
list.foreach(println) // no output
谁能指出为什么这段代码不起作用。
非常感谢任何帮助。
我假设 spark
是 SparkContext
。在这种情况下,本地 list
没有更新,只有它的副本作为闭包发送到 spark 也就不足为奇了。如果您需要 foreach
中的可变值,您应该使用 Accumulator
.
我是 Scala 和 Apache Spark 的新手,一直在尝试一些在线示例。
我正在使用 scala.collection.mutable.ArrayBuffer 来存储形式为 (Int,Array[String]) 的元组列表。我正在创建一个 ArrayBuffer,然后逐行解析文本文件并将每一行中的所需数据附加到 ArrayBuffer。
代码没有编译错误。但是当我在附加它的块之外访问 ArrayBuffer 时,我无法获取内容并且 ArrayBuffer 始终为空。
我的代码如下-
val conf = new SparkConf().setAppName("second")
val spark = new SparkContext(conf)
val file = spark.textFile("\Desktop\demo.txt")
var list = scala.collection.mutable.ArrayBuffer[(Int, Array[String])]()
var count = 0
file.map(_.split(","))
.foreach { a =>
count = countByValue(a) // returns an Int
println("count is " + count) // showing correct output "count is 3"
var t = (count, a)
println("t is " + t) // showing correct output "t is (3,[Ljava.lang.String;@539f0af)"
list += t
}
println("list count is = " + list.length) // output "list count is = 0"
list.foreach(println) // no output
谁能指出为什么这段代码不起作用。
非常感谢任何帮助。
我假设 spark
是 SparkContext
。在这种情况下,本地 list
没有更新,只有它的副本作为闭包发送到 spark 也就不足为奇了。如果您需要 foreach
中的可变值,您应该使用 Accumulator
.