Spark在reduce算子中的疑问,这种情况算是Bug吗?

熙白白 2017-05-23 01:50:22
运行环境:Windows平台、Eclipse、
版本:Spark 1.6.2


val conf = new SparkConf()
conf.setMaster("local
  • "
  • ).setAppName("HHHHA") //本地模式运行
    val sc = new SparkContext(conf)

    val ll=(1 to 9).toList
    // ( sum , count , avg)
    sc.parallelize(ll,3).map(x =>("KEY",(x,1,1.0)))
    .reduceByKey{(x,y)=>
    println (s"x.count=${x._2} , y.count=${y._2}")
    val count=x._2+1
    println (count)
    ( 1, count, 1)
    }.collect().foreach(x=>print("计算结果为:"+x))

    sc.stop()



---------------------------------------------------------------------------------------------
输出:
计算结果为:(KEY,(1,5,1.0))

笔者本来是打算是给同事演示Spark的算子,写个算平均数的...结果发现这个count竟然离奇地不靠谱。 当partition数目发生改变的时候结果会造成误差。


-----------------------------------------------------------------------------------------
宝宝蓝瘦,想不出来这究竟是什么原因。猜测有以下几种(胡乱瞎猜):

1.网上找了下资料,同时结合程序运行的调试堆栈,猜想会不会是ShuffleMapTask中,Task汇聚结果给整个Stage的时候发生Bug呢?

2.后来由于我把x._2+1改成改成x._2+y._2后结果就完美运行.。难道非得y参与运算才汇聚吗?!还是说我代码写得有问题呢....


求各位大神指导。
...全文
124 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
LinkSe7en 2017-05-23
  • 打赏
  • 举报
回复
你看看wordCount的demo,也是x+y。我猜在单个partition内元素的聚合,和stage下partition的聚合,都是用同样的算子进行计算。所以x+y就合理了。

1,258

社区成员

发帖
与我相关
我的任务
社区描述
Spark由Scala写成,是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于MapReduce算法实现的分布式计算。
社区管理员
  • Spark
  • shiter
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧