Вот кадр данных - в основном, есть два возможных типа - X
и Y
для разных источников A
, B
, C
, D
...
Source | Type
-------------------
A | X
A | Y
B | X
C | Y
A | X
D | Y
... | ...
Конечная цель - собрать процентное соотношение: ratio(X in A) = count(X) / (count(X) + count(Y))
Итак, в нашем примере, ratio(X in A) = 2 / (2 + 1) = 2 / 3 ~ 0.667
Очень просто, но я не могу понять, как это сделатьв один выбор с использованием только потокового API v2 (структурированная потоковая передача, датафреймы)?С моей точки зрения, это возможно только через map
функции ...
Это то, что у меня сейчас есть - разбросанные подсчеты для X
и Y
типов
msgDataFrame
.select(SOURCE, TYPE)
.where(msgDataFrame.col(TYPE).equalTo("X"))
.groupBy(SOURCE)
.count()
.show(); // <-- gives me count for 'X'-es
msgDataFrame
.select(SOURCE, TYPE)
.filter(msgDataFrame.col(TYPE).equalTo("Y"))
.groupBy(SOURCE)
.count()
.show(); // <-- gives me count for 'Y'-cs