Я пытаюсь разбить Spark DataFrame на основе столбца «b» с помощью groupByKey(), но в итоге у меня есть разные группы в одном разделе.Partition Spark DataFrame на основе столбца
Вот кадр данных и код, я использую:
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])))
P.S. Чтобы дать вам немного контекста, я делаю это, потому что мне нужно обновлять строки в DataFrame, используя данные из всех остальных строк, имеющих одинаковое значение для определенного столбца. Поэтому map() недостаточно, я в настоящее время пытаюсь использовать mapPartitions(), где каждый раздел будет содержать все строки, имеющие одинаковое значение для конкретного столбца. Не стесняйтесь сказать мне, знаете ли вы, как лучше это сделать :)
Спасибо большое!
ClydeX