repartition
repartition 有三個重載的函數:
1) def repartition(numPartitions: Int): DataFrame
/**
* Returns a new [[DataFrame]] that has exactly `numPartitions` partitions.
* @group dfops
* @since 1.3.0
*/
def repartition(numPartitions: Int): DataFrame = withPlan {
Repartition(numPartitions, shuffle = true, logicalPlan)
}
此方法傳回一個新的[[DataFrame]],該[[DataFrame]]具有确切的 'numpartition' 分區
2) def repartition(partitionExprs: Column*): DataFrame
@scala.annotation.varargs
def repartition(partitionExprs: Column*): DataFrame = withPlan {
RepartitionByExpression(partitionExprs.map(_.expr), logicalPlan, numPartitions = None)
}
此方法傳回一個新的[[DataFrame]]分區,它由保留現有分區數量的給定分區表達式劃分,分區數量由 spark.sql.shuffle.partition 決定。得到的DataFrame是哈希分區的。
這與SQL (Hive QL)中的“distribution BY”操作相同。
3) def repartition(numPartitions: Int, partitionExprs: Column*): DataFrame
@scala.annotation.varargs
def repartition(numPartitions: Int, partitionExprs: Column*): DataFrame = withPlan {
RepartitionByExpression(partitionExprs.map(_.expr), logicalPlan, Some(numPartitions))
}
此方法傳回一個新的[[DataFrame]],由給定的分區表達式劃分為 'numpartition' 。得到的DataFrame是哈希分區的。
coalesce
1) coalesce(numPartitions: Int): DataFrame
def coalesce(numPartitions: Int): DataFrame = withPlan {
Repartition(numPartitions, shuffle = false, logicalPlan)
}
傳回一個新的[[DataFrame]],該[[DataFrame]]具有确切的 'numpartition' 分區。類似于在[[RDD]]上定義的coalesce,這種操作會導緻一個狹窄的依賴關系,例如:
如果從1000個分區到100個分區,就不會出現shuffle,而是100個新分區中的每一個都會聲明10個目前分區。
反過來從100個分區到1000個分區,将會出現shuffle。
我不生産知識 我隻是知識的搬運工