当前位置: 首页 > 知识库问答 >
问题:

加入PySparkSQL已在键子集中分区的DataFrames

步博艺
2023-03-14

我想加入 2 个 Spark 数据帧,这些数据帧已在我用于联接的键的子集中进行了分区。但是当我这样做时,交换操作仍然会发生。如何在没有交换或广播的情况下加入他们。

例如,我有DataFrame df1和df2。它们都有相同的列,即col1、col2、col3。它们都已经使用col1进行了分区。我想使用col1和col2加入它们。但是当我这样做时,它会再次使用col1和col2重新分区。

共有1个答案

盖向荣
2023-03-14

AFAIK,数据帧需要由两侧的同一列分区,以便进行一次洗牌。

例如:

right_df = right_df.repartition(400)
left_df = left_df.repartition(400) # will lead to one more shuffle when join operation is used down the line
df = left_df.join(right_df, col("id") == col("user_id"), "outter")
left_df = left_df.withColumnRenamed("id", "repartition_id").repartition(400, col("repartition_id")
right_df = right_df.withColumnRenamed("user_id", "repartition_id").repartition(400, col("repartition_id")
df = left_df.join(right_df, "repartition_id", "outter")
 类似资料:
  • 我有一个数组,我想把它分成两部分,使它们的总和相等,例如可以分成。两者的总和都是50。这本质上是划分算法,但我希望检索子集,而不仅仅是识别它是否可划分。所以,我继续做了以下事情: 更新:更新脚本以处理重复项 样本输入 我基本上存储了相应的值,这些值是为了在中获得值而添加的。但是,随着大小的增加,很明显会有太多的子列表(等于中的元素数量)。有没有更好/更有效的方法来做到这一点?

  • 我想知道,在什么情况下,具有相同分区键的消息会进入不同的分区。 我使用下面给出的命令运行了属于同一组的两个消费者在控制台中监听一个主题: 我使用“纳米/Kafka-php”库将消息放入带有键 的主题。当我发送多个这样的消息时,我发现很少有消息转到第二个消费者,而大多数消息都发送给消费者1。 由于我对所有消息使用相同的密钥,因此我希望所有消息都由同一个使用者使用。每个使用者都绑定到每个分区。 我使用

  • 本文向大家介绍集的分区,包括了集的分区的使用技巧和注意事项,需要的朋友参考一下 集合的分区(例如S)是满足以下三个条件的n个不相交的子集(例如P 1,P 1,... P n)的集合- P i不包含空集。 对于所有0 <i≤n,                        [P i ≠{∅} 子集的并集必须等于整个原始集合。                        [P 1 ∪P 2 ∪..

  • 本文向大家介绍如何在Linux上加入多个分区,包括了如何在Linux上加入多个分区的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将使用2个20 GB的驱动器在Linux上创建一个单一分区,以形成40 GB的单个安装点,以便我们可以将数据存储在一个具有更大空间的地方。在这里,我们使用一个名为“ mhddfs ”的软件包,该软件包是Linux的驱动程序,它将多个安装点组合到一个虚拟磁盘中。这