в столбце искровых данных отсутствуют столбцы / значения - PullRequest
0 голосов
/ 31 августа 2018

Сейчас я сталкиваюсь с проблемой, которую не могу решить, позвольте мне объяснить.

Мне нужно повернуть фрейм искровых данных, но в некоторых случаях нет записей для того, чтобы в сводную колонку включался нужный мне столбец. Вот пример:

Допустим, есть 4 типа событий: A, B, C, D

Я получаю файлы журналов событий, например:

|Id|year|type|
|--|----|----|
|a |2015|   A|
|a |2016|   A|
|a |2015|   A|
|a |2017|   A|
|b |2015|   A|
|b |2015|   B|
|b |2016|   D|
|b |2015|   B|
|b |2017|   A|  

Когда я делаю пивот, я получаю:

|id|year|   A|   B|   D|
|--|----|----|----|----|
|a |2015|   2|null|null|
|a |2016|   1|null|null|
|a |2017|   1|null|null|
|b |2015|   1|   2|null|
|b |2016|   1|null|   1|
|b |2017|   1|null|null|

что мне действительно нужно, это:

|id|year|   A|   B|   C|   D|
|--|----|----|----|----|----|
|a |2015|   2|   0|   0|   0|
|a |2016|   1|   0|   0|   0|
|a |2017|   1|   0|   0|   0|
|b |2015|   1|   2|   0|   0|
|b |2016|   1|   0|   0|   1|
|b |2017|   1|   0|   0|   0|

И представьте, что в каждом полученном мной файле журнала событий отсутствуют события разных типов, но мне всегда нужны столбцы для всех типов событий (A, B, C и D).

Надеюсь, я хорошо объяснил.

1 Ответ

0 голосов
/ 31 августа 2018
Val lscol=Seq((“A”),(“B”),(“C”),(“D”)).toDF(“Type”)

// df - начальный кадр данных до разворота

df.join(lscol,df.col(“Type”)===lscol.col(“Type”),”right”).drop(df(“Type”)).groupBy(“ID”,”year”).pivot(“Type”).agg(count(“Type”)).filter(!col(“ID”).isNull && !col(“year”).isNull).na.fill(0).show
...