#apache-spark #pyspark #apache-spark-sql
Вопрос:
--------------------------- -------
|Maps | B |
--------------------------- -------
|Map(a -> 1, b -> 2, c -> 3)| 1 |
|Map(a -> 1, b -> 3, c -> 3)| 1 |
|Map(a -> 2, b -> 4, d -> 6)| 2 |
--------------------------- -------
Чтобы получить сумму карт, которые имеют одинаковое значение «B».
Ожидаемый:
--------------------------- -------
|Maps | B |
--------------------------- -------
|Map(a -> 2, b -> 5, c -> 6)| 1 |
|Map(a -> 2, b -> 4, d -> 6)| 2 |
--------------------------- -------
Ответ №1:
Нашел обходной путь:
from pyspark.sql import functions as F
df.select(F.explode("Maps"), F.col("B"))
.groupBy("key", "B")
.sum("value")