【问题标题】:RDD spark.default.parallelism equivalent for Spark DataframeSpark Dataframe 的 RDD spark.default.parallelism 等效项
【发布时间】:2020-03-14 09:45:18
【问题描述】:

问题

SparkSQL DataFrame 是否有“spark.default.parallelism”等效项用于窄转换(映射、过滤器等)?

背景

显然,RDD 和 DataFrame 之间的分区控制是不同的。 Dataframe 具有 spark.sql.shuffle.partitions 来控制分区以进行混洗(如果我理解正确,则进行广泛的转换)并且“spark.default.parallelism”将无效。

How Spark dataframe shuffling can hurt your partitioning

但是洗牌与分区有什么关系呢? 好吧,如果您使用的是 RDD,那真的没什么……但是使用数据帧,那就是另一回事了。 ...正如您所见,分区数突然增加。这是因为 Spark SQL 模块包含以下默认配置:spark.sql.shuffle.partitions 设置为 200。

下面的文章表明 spark.default.parallelism 不适用于 Dataframe。

What is the difference between spark.sql.shuffle.partitions and spark.default.parallelism?

spark.default.parallelism 是当用户未明确设置时,由 join、reduceByKey 和并行化等转换返回的 RDD 中的默认分区数。但 spark.default.parallelism 似乎只适用于原始 RDD,在处理数据帧时会被忽略。

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    窄转换(mapfilter)保留了分区的数量,这就是不需要并行设置的原因。设置仅对可能影响分区数量的转换有意义。

    【讨论】:

    • 感谢您的回复。如果宽操作可能会更改分区号,是否有 spark.sql.shuffle.partitions 等效的 RDD 设置。我想对于 RDD,spark.default.parallelism 适用于两者,但是 Spark 引入了一种功能,可以分别为 DataFrame 分别设置窄和宽。这是正确的吗?
    • “窄”转换不会在任何地方更改分区。 DataFrame 转换在幕后变成了 RDD 转换。使用 DataFrame 转换的好处是(a)整个阶段的代码生成和(b)更好的优化。尽可能少地直接使用 RDD。
    猜你喜欢
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 2017-04-11
    • 2016-09-26
    • 2017-08-16
    • 2017-11-27
    • 2022-11-02
    相关资源
    最近更新 更多