Apache spark 基于列的Spark数据帧分区

Apache spark 基于列的Spark数据帧分区,apache-spark,Apache Spark,我试图使用groupByKey()根据列“b”对Spark数据帧进行分区,但最终在同一分区中有不同的组 以下是我使用的数据帧和代码: df: +---+---+ | a| b| +---+---+ | 4| 2| | 5| 1| | 1| 4| | 2| 2| +---+---+ val partitions = df.map(x => x.getLong(1)).distinct().count().toInt val df2 = df.map(r =>

我试图使用groupByKey()根据列“b”对Spark数据帧进行分区,但最终在同一分区中有不同的组

以下是我使用的数据帧和代码:

df:
+---+---+
|  a|  b|
+---+---+
|  4|  2|
|  5|  1|
|  1|  4|
|  2|  2|
+---+---+


 val partitions = df.map(x => x.getLong(1)).distinct().count().toInt
 val df2 = df.map(r => (r.getLong(1), r)).groupByKey(partitions)
 val gb = df2.mapPartitions(iterator => {
            val rows = iterator.toList
            println(rows)
            iterator
            })

The printed rows are:
Partition 1: List((2,CompactBuffer([4,2], [2,2])))
Partition 2: List((4,CompactBuffer([1,4])), (1,CompactBuffer([5,1])))
第4组和第1组在同一个分区(2)中,我希望它们在不同的分区中,您知道如何做到这一点吗

Desired output:
Partition 1: List((2,CompactBuffer([4,2], [2,2])))
Partition 2: List((4,CompactBuffer([1,4])))
Partition 3: List((1,CompactBuffer([5,1])))
另外,为了让您了解一下上下文,我之所以这样做是因为我需要使用来自共享特定列相同值的所有其他行的数据来更新数据帧中的行。因此,map()是不够的,我目前正在尝试使用mapPartitions(),其中每个分区将包含特定列具有相同值的所有行。如果您知道更好的方法,请随时告诉我:)

非常感谢


ClydeX

听起来像是您正在尝试做的事情,可以通过使用窗口功能来完成: