gpt4 book ai didi

apache-spark - Spark Dataframe 默认是如何分区的?

转载 作者:行者123 更新时间:2023-12-05 00:44:41 25 4
gpt4 key购买 nike

我知道 RDD 是使用 HashPartitioner 根据键值进行分区的。但是Spark Dataframe默认如何分区,因为它没有键/值的概念。

最佳答案

Dataframe 的分区取决于为创建它而运行的任务数。

没有应用“默认”分区逻辑。以下是一些如何设置分区的示例:

  • 通过 val df = Seq(1 to 500000: _*).toDF() 创建的 Dataframe 将只有一个分区。
  • 通过 val df = spark.range(0,100).toDF() 创建的 Dataframe 具有与可用内核数一样多的分区(例如,当您的 master 设置为 local 时为 4 [4])。此外,请参阅下面关于“默认并行性”的备注,该备注对没有父 RDD 的 parallelize 等操作生效。
  • 从 RDD (spark.createDataFrame(rdd, schema)) 派生的 Dataframe 将具有与底层 RDD 相同数量的分区。就我而言,由于我在本地有 6 个内核,因此 RDD 是用 6 个分区创建的。
  • 从 Kafka 主题消费的 Dataframe 将具有与该主题的分区匹配的分区数量,因为它可以使用与该主题拥有的分区一样多的核心/插槽来消费该主题。
  • 通过读取文件创建的数据框,例如来自 HDFS 的分区数量将与文件匹配,除非必须根据默认为 128MB 的 spark.sql.files.maxPartitionBytes 将单个文件拆分为多个分区。
  • 从需要 shuffle 的转换派生的 Dataframe 将具有由 spark.sql.shuffle.partitions 设置的可配置数量的分区(默认为 200)。
  • ...

RDD 和结构化 API 之间的主要区别之一是您对分区的控制不如 RDD 那样多,您甚至可以定义自定义分区器。这对于 Dataframe 是不可能的。

默认并行度

Execution Behavior 的文档配置 spark.default.parallelism 说明:

For operations like parallelize with no parent RDDs, it depends on the cluster manager:

Local mode: number of cores on the local machine

Mesos fine grained mode: 8

Others: total number of cores on all executor nodes or 2, whichever is larger

关于apache-spark - Spark Dataframe 默认是如何分区的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66386963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com