Цикл скрипта свиньи, хотя вычисление средних значений

У меня есть данные, которые будут запускаться в свинье с использованием aws emr, как выглядит. Столбцы называются модель, год, units_sold, total_customers.

chevy     1900     1000    49
chevy     1901     73      92
chevy     1902     45      65
chevy     1903     300     75
ford      1900     35      12
ford      1901     777     32
ford      1902     932     484
ford      1903     33      15

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

chevy    (1000+73+45+300) / (49+92+65+75) = 5.04
ford     (35+777+932+33) / (12+32+484+15) = 3.27

в моем сценарии у меня есть

A = *Step to load data*;
B = GROUP A by year;
C = results = FOREACH B GENERATE SUM(units_sold)/SUM(total_customers);
dump C;

Это возвращает неверный результат. Как добиться результатов, которые выглядят как

chevy    5.04
ford     3.27
0
0
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, вам нужно сгруппировать по типу машины, а не по году. Кроме того, вам может потребоваться приведение к типу float, если units_sold и total_customers являются целыми числами, если вам не нужен округленный результат. Пытаться:

B = GROUP A by model;
C = FOREACH B GENERATE (float)SUM(units_sold)/(float)SUM(total_customers);

Другие вопросы по теме