Pyspark使用优化及踩坑点总结

1.coalesce滥用导致saveAsTextFile数据保存很慢

        rdd.coalesce(1).saveAsTextFile(SAVE_PATH) 

        转换成:rdd.coalesce(1, True).saveAsTextFile(SAVE_PATH) 

                      或:rdd.repartition(1).saveAsTextFile(SAVE_PATH)

        coalesce:分区时没有shuffle操作

        repartition:分区时进行了shuffle操作。

        coalesce()其实是repartition()的接口封装函数,即可用repartition(num)的都可用coalesce(num,True)代替,而coalesce(num)则无法用repartition(num)代替。

        coalesce没有shuffle,整个过程都属于一个阶段,因此最终该过程的task数量是1,尽管我在最开始分了50个分区,没用!系统只会分给我1个task【相当于分区并行化操作失效】

   

        但repartition就不一样了,因为有shuffle操作,整个过程被repartition分为两个stage,两个stage互不干扰。stage1是数据读入和处理,因为我分了50个分区,所以系统就会给我50个task,stage2是数据保存,我将最终分区数定为1,那么该阶段的task就是1。

  

         侬瞧瞧,两张图片中可以明显看出coalesce(1)引起的灾难性的效率问题。所以,请慎用coalesce(1)!                

参考资料:记录Spark中使用coalesce遇到的坑 - 简书 (jianshu.com)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值