关于如何获得RDDa和/或a 的分区数量有很多问题DataFrame:答案总是如下:
rdd.getNumPartitions
Run Code Online (Sandbox Code Playgroud)
要么
df.rdd.getNumPartitions
Run Code Online (Sandbox Code Playgroud)
不幸的是,这是一个昂贵的操作,DataFrame因为
df.rdd
Run Code Online (Sandbox Code Playgroud)
需要转换DataFrame为rdd.这是运行所需时间的顺序
df.count
Run Code Online (Sandbox Code Playgroud)
我正在编写逻辑,可选择 repartition "s"或coalesce"sa" DataFrame- 基于当前分区数是否在可接受的值范围内,或者低于或高于它们.
def repartition(inDf: DataFrame, minPartitions: Option[Int],
maxPartitions: Option[Int]): DataFrame = {
val inputPartitions= inDf.rdd.getNumPartitions // EXPENSIVE!
val outDf = minPartitions.flatMap{ minp =>
if (inputPartitions < minp) {
info(s"Repartition the input from $inputPartitions to $minp partitions..")
Option(inDf.repartition(minp))
} else {
None
}
}.getOrElse( maxPartitions.map{ maxp =>
if (inputPartitions > maxp) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下方法获取数据帧的分区数:
df.rdd.getNumPartitions.toString
Run Code Online (Sandbox Code Playgroud)
但是当我监控 Spark 日志时,我发现它会启动许多阶段,并且是一项成本高昂的操作。

根据我的理解,dataframe通过元数据为rdd添加了一个结构层。那么,为什么在转换为 rdd 时剥离它需要这么多时间呢?