Чтобы суммировать столбец словаря, обусловленный другим столбцом в Pyspark

#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")