DataFrame --- join / groupBy-agg - 分区

Posted

技术标签:

【中文标题】DataFrame --- join / groupBy-agg - 分区【英文标题】:DataFrame --- join / groupBy-agg - partition 【发布时间】:2017-07-11 21:10:11 【问题描述】:

我可能对加入/groupBy-agg 有一个幼稚的问题。在RDD的日子里,每当我想表演时 一种。 groupBy-agg,我曾经说 r​​educeByKey(PairRDDFunctions 的)带有可选的 Partition-Strategy(带有分区数或 Partitioner) 湾。 join (of PairRDDFunctions) 及其变体,我曾经有一种方法来提供分区数

在DataFrame中,如何在这个操作中指定分区数?事后我可以使用 repartition() 。但这将是工作中的另一个阶段。

在连接期间增加分区/任务数量的一种解决方法是在 spark-submit 期间将“spark.sql.shuffle.partitions”设置为某个所需的数字。我正在尝试查看是否有办法以编程方式为 groupBy-agg / join 的每个步骤提供此功能?

以编程方式执行此操作的原因是,根据数据帧的大小,我可以使用更多或更少的任务来避免 OutOfMemoryError。

【问题讨论】:

【参考方案1】:

AFAIK 你不能在每个步骤中指定多个分区,但是:

Spark 将尝试重新使用现有分区(如果存在),因此如果您在执行 groupBy 之前重新分区 ,它应该使用您指定的任意数量的分区(假设您正在使用当然是同一个键)。连接也一样,如果两个数据帧都使用相同的键(必须是连接键)和相同的分区数进行分区,则不会重新洗牌。 否则你确实可以调整spark.sql.shuffle.partitions

【讨论】:

以上是关于DataFrame --- join / groupBy-agg - 分区的主要内容,如果未能解决你的问题,请参考以下文章

pd.DataFrame.join 不断排序

Pandas中DataFrame数据合并连接(concatmergejoin)之join

DataFrame --- join / groupBy-agg - 分区

R语言dplyr包连接多个dataframe实战:使用left_join

基于DataFrame join写列

Pandas文摘:Join And Merge Pandas Dataframe