起因:在学习FP-Growth算法时,导入数据建立好Tree后,对输入项A查找其频繁项时,需要在driver端记录下输入项A的支持度计数总和,此时出现在executor端对driver端的变量的值进行更改后,driver端的变量值却没有改变,在好心人的帮助下,发现spark有Broadcast和Accumulator。
错误案例:同一个变量打印出现不同结果
var goodsFreq = 0L val freqItemsets = fpModel.freqItemsets.cache() freqItemsets.foreach{f => if(f.items.mkString == test.mkString){ goodsFreq = f.freq println("value1:"+goodsFreq) } }
value1:2513
value2:0
正确案例: