spark sql中如何解决并行度低的问题?

在spark设置并行度一般通过两种方式来设置:

1.spark.default.parrallelism
2.textFile()传入第二个参数,指定partition数量

使用spark sql的时候会出现什么问题?

但是如果使用来spark sql,用spark sql的那个stage的并行度,你没办法自己指定,因为spark sql 自己会默认根据hive表对应的hdfs的block,自动设置spark sql查询所在的那个stage的并行度。

你自己通过spark.default.parallelism参数指定的并行度,只会在没有spark sql的stage中生效。

比如:你的第一个stage,用spark sql从hive表中查询了一些数据,然后做了一些transformation操作,接着做了一个shuffle操作(例如groupByKey);下一个stage,在stage之后,做了一些transformation操作。
hive表,对应了一个hdfs文件,有20个block;你自己设置了spark.default.parallelish参数为100;
你的第一个stage的并行度,是不受你设置的参数控制的,就只有20task;第二个stage的并行度,才是你自己设置的100;
这样会产生的问题就是:在第一个stage中,可能有非常复杂的业务逻辑或者算法,如果只有默认的20个并行度的话,每个task要处理很大的数据量,这就会导致第一个stage执行的速度特别慢。而第二个就很快。

解决方法

直接对spark sql查询出来的rdd使用repartition,进行重新分区。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值