本帖最后由 nike1972 于 2016-8-9 21:38 编辑
现在的需求是这样的,假设我在外部声明了一个字段,在map中对这个字段进行了赋值,然后在reduce中对这个字段进行取值操作。我以wordcount为例,
[mw_shl_code=scala,true]object WordCount {
var str:String=null
def main(args: Array[String]) {
if (args.length < 1) {
System.err.println("Usage: <file>")
System.exit(1)
}
val conf = new SparkConf()
val sc = new SparkContext(conf)
val line = sc.textFile(args(0))
val counts= line.flatMap(_.split(" ")).map(word=>{
str="welcome to spark"
(word, 1)
})
println(str)
val finalRdd= counts.reduceByKey((x,y)=>{
x+y
println(str)
}).collect().foreach(println)
sc.stop()
}
}[/mw_shl_code]
这是一个简单的wordcount代码,我只是声明了一个全局变量str,并且在map中对str进行了赋值操作,我想知道为什么map和reduce之间的那个println语句打印出来的str是null,是不是因为我没有进行action操作,map语句还没有执行的原因么?我希望将map中的str的赋值的内容传到reduce中去,在reduce中进行操作,请问有什么办法吗?
|
|