• spark.sql.shuffle.partitions到底影响什么


    在运行Spark sql作业时,我们经常会看到一个参数就是spark.sql.shuffle.partitions,而且默认值是200.这个参数到底影响了什么呢?今天咱们就梳理一下。
    1、Spark Sql中的Shuffle partitions
    在Spark中的Shuffle partitions是与普通的分区不同的。我们可以通过两个例子来验证
    普通分区
    val df = sparkSession.read.csv("src/main/resources/sales.csv") println(df.rdd.partitions.length)
    执行代码后我们会发现这是2个文件,也就是对应有两个分区
    println(df.groupBy("_c0").count().rdd.partitions.length)
    这个打印结果是多少呢?
    打印结果是200,也就是分区从2增长到了200;

    原因就是dataframe中shuffle partitions的数量是由spark.sql.shuffle.partitions控制,默认值就是200.
    2、spark.sql.shuffle.partitions 是否需要调整大小?
    shuffle partitions的数量默认为200,是否需要调整呢?注意这个参数是需要进行调整的而且Spark中并不会根据数据量进行动态的设置,需要我们基于数据规模进行调整。
    > 小数据集,200数值显然有些大,大部分时间都花费在调度,任务执行本身花费时间较小
    > 大数据集,200数值有些小,不能充分利用集群资源
    合理的数值应该是多少呢?
    建议:建议设置初始分区的1.5-2倍之间
    更改方式
    sparkSession.conf.set("spark.sql.shuffle.partitions",100) println(df.groupBy("_c0").count().rdd.partitions.length)

  • 相关阅读:
    [Erlang 0116] 当我们谈论Erlang Maps时,我们谈论什么 Part 1
    致鸡鸣狗盗
    一个技术人的知识管理方法论
    一碗清酒聚知音 我看 《少年黄飞鸿-铁马骝》
    [Erlang 0115] 2014值得期待的Erlang两本新书
    [Erlang 0114] Erlang Resources 小站 2013年7月~12月资讯合集
    我的2013 Q.E.D
    Elixir
    [Erlang 0113] Elixir 编译流程梳理
    [Erlang 0112] Elixir Protocols
  • 原文地址:https://www.cnblogs.com/kukudetent/p/14102372.html
Copyright © 2020-2023  润新知