
160
|
第
7
章
在显式调用
DataFrame API
的某些方法时,也会创建分区。举例来说,创建一个大型
DataFrame
或者从硬盘上读取大文件时,可以显式控制
Spark
创建指定数量的分区。
// Scala代码
val ds = spark.read.textFile("../README.md").repartition(16)
ds
: org.apache.spark.sql.Dataset
[
String
]
=
[
value: string
]
ds.rdd.getNumPartitions
res5
: Int
= 16
val numDF = spark.range(1000L * 1000 * 1000).repartition(16)
numDF.rdd.getNumPartitions
numDF
: org.apache.spark.sql.Dataset
[
Long
]
=
[
id: bigint
]
res12
: Int
= 16
最后,
混洗分区
会在混洗阶段创建。在默认情况下,混洗分区的分区数为
200
,这是由
spark.sql.shuffle.partitions
决定的。可以根据数据集的大小修改这个值,以减少小分
区的数量,因为这些分区需要跨网络传输到其他执行器以用于任务执行。
spark.sql.shuffle.partitions
的默认值对于小负载作业或流式作业而言太
高了,你可能需要将其调低到执行器核心总数甚至更低。
混洗分区会在执行
groupBy()
或
join()