Это расширение этого вопроса, Группа Apache Spark путем объединения типов и подтипов .
val sales = Seq(
("Warsaw", 2016, "facebook","share",100),
("Warsaw", 2017, "facebook","like",200),
("Boston", 2015,"twitter","share",50),
("Boston", 2016,"facebook","share",150),
("Toronto", 2017,"twitter","like",50)
).toDF("city", "year","media","action","amount")
Все хорошо с этим решением, однако ожидаемый результат следует условно считать в разных категориях.
Итак, вывод должен выглядеть так:
+-------+--------+-----+
| Boston|facebook| 1|
| Boston| share1 | 2|
| Boston| share2 | 2|
| Boston| twitter| 1|
|Toronto| twitter| 1|
|Toronto| like | 1|
| Warsaw|facebook| 2|
| Warsaw|share1 | 1|
| Warsaw|share2 | 1|
| Warsaw|like | 1|
+-------+--------+-----+
Здесь, если действие является share, мне нужно, чтобы это учитывалось как в share1, так и в share2. Когда я подсчитываю это программно, я использую инструкцию case и говорю case, когда действие - это share, share1 = share1 +1, share2 = share2 + 1
Но как я могу сделать это в Scala или pyspark или sql?