默认情况下,sparkDataframe是如何分区的?

0md85ypi  于 2021-07-12  发布在  Spark
关注(0)|答案(1)|浏览(480)

我知道rdd是使用hashpartitioner基于键值进行分区的。但是sparkDataframe在默认情况下是如何分区的,因为它没有键/值的概念。

zxlwwiss

zxlwwiss1#

Dataframe的分区方式取决于它的创建方式。
没有应用“默认”分区逻辑。下面是一些如何设置分区的示例:
通过以下方式创建的Dataframe val df = Seq(1 to 500000: _*).toDF() 只有一个分区。
从rdd派生的Dataframe( spark.createDataFrame(rdd, schema) )将具有与基础rdd相同数量的分区。在我的例子中,由于本地有6个内核,所以rdd是用6个分区创建的。
从kafka主题消费的Dataframe将具有与该主题的分区匹配的分区数量。
通过读取文件(例如从hdfs读取文件)创建的Dataframe将具有与文件的分区数量相匹配的分区数量。
从需要洗牌的转换派生的Dataframe将具有由 spark.sql.shuffle.partitions (默认为200)。
...
rdd和结构化api之间的一个主要区别是,您对分区的控制不如rdd,rdd甚至可以定义自定义分区器。这对于Dataframe是不可能的。

相关问题