spark中tasks数量的设置

本文介绍如何通过调整Spark SQL中的并行度参数来优化查询性能。通过对task数量的合理设置,可以有效提升处理大规模数据集时的速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spark中有partition的概念,每个partition都会对应一个task,task越多,在处理大规模数据的时候,就会越有效率。不过task并不是越多越好,如果平时测试,或者数据量没有那么大,则没有必要task数量太多。
我的第一个query程序,有200个task,我改成了50个,节约了1s左右。
参数可以通过spark_home/conf/spark-default.conf配置文件设置:

spark.sql.shuffle.partitions 50
spark.default.parallelism 10

上边两个参数,第一个是针对spark sql的task数量,我的程序逻辑是将rdd首先转换成dataframe,然后进行query,所以对应第一个参数。而如果程序是非sql则第二个参数生效。
附上query的scala代码:

package Users

import org.apache.spark.{SparkContext, SparkConf}
import org.apache.spark.SparkContext._
import org.apache.spark.sql.Row
import org.apache.spark.sql.types.{StructType,StructField,StringType}


object AreaPhone {
  def main(args: Array[String]) {
    if (args.length == 0) {
      System.err.println("Usage: AreaPhone <file1>")
      System.exit(1)
    }

    val conf = new SparkConf().setAppName("AreaPhone")
    val sc = new SparkContext(conf)

    val sqlContext = new org.apache.spark.sql.SQLContext(sc)

    val users = sc.textFile(args(0))

    val schemaString = "index userid phone area age gender userau date"

    val schema =
      StructType(
        schemaString.split(" ").map(fieldName => StructField(fieldName, StringType, true)))


    val rowRDD = users.map(_.split(",")).map(p=>Row(p(0), p(1), p(2), p(3), p(4), p(5), p(6), p(7)))


    val usersDataFrame = sqlContext.createDataFrame(rowRDD, schema)

    usersDataFrame.registerTempTable("users")

    usersDataFrame.groupBy("area").count().show()

    val result = usersDataFrame.groupBy(usersDataFrame("phone").substr(0,3)).count().toDF("phone","count")

    result.sort(result("phone").asc).show()


    sc.stop()
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值