Я учусь работать со Scala и Spark. Это мои первые случаи их использования. У меня есть некоторые структурированные Scala DataSet (org.apache.spark.sql.Dataset), как следующий формат.
Region | Id | RecId | Widget | Views | Clicks | CTR
1 | 1 | 101 | A | 5 | 1 | 0.2
1 | 1 | 101 | B | 10 | 4 | 0.4
1 | 1 | 101 | C | 5 | 1 | 0.2
1 | 2 | 401 | A | 5 | 1 | 0.2
1 | 2 | 401 | D | 10 | 2 | 0.1
NOTE: CTR = Clicks/Views
Я хочу объединить сопоставление независимо от виджета (т.е. используя Region, Id, RecID).
Ожидаемый вывод Я хочу, это выглядит следующим образом:
Region | Id | RecId | Views | Clicks | CTR
1 | 1 | 101 | 20 | 6 | 0.3
1 | 1 | 101 | 15 | 3 | 0.2
Что Я получаю похожениже:
>>> ds.groupBy("Region","Id","RecId").sum().show()
Region | Id | RecId | sum(Views) | sum(Clicks) | sum(CTR)
1 | 1 | 101 | 20 | 6 | 0.8
1 | 1 | 101 | 15 | 3 | 0.3
Я понимаю, что он суммирует весь CTR из оригинала, но я хочу, чтобы groupBy, как объяснено, все же хотел получить ожидаемое значение CTR. Я также не хочу менять имена столбцов, поскольку они меняются в моем подходе.
Существует ли какой-либо возможный способ вычисления таким образом. У меня также есть #Purchases
и CoversionRate
(# Закупки / просмотры), и я хочу сделать то же самое с этим полем. Любые выводы будут оценены.