Я пытаюсь использовать некоторые функции Pig на Titanic data. В какой-то момент я сузить ее до пассажирского класса и тарифа (цена билета):Как отличить поле свиньи для функции AVG
Вот код:
sh echo "1. create FarePclass with two fields"
FarePclass = FOREACH train GENERATE Pclass,Fare ;
DUMP FarePclass;
sh echo "2. create FareByClass grouping by Pclass"
FareByPclass = GROUP FarePclass BY Pclass ;
--FareByPclass = GROUP FarePclass ALL;
--DUMP FareByPclass;
DESCRIBE FareByPclass;
sh echo "3. get average"
AvgFareByPclass = FOREACH FareByPclass GENERATE (float) SUM(FarePclass.Fare);
Вот некоторые примеры строк из заявления DUMP на шаге 1 и выход:
(2,10.5)
(3,7.05)
(3,29.125)
(2,13)
(1,30)
(3,23.45)
(1,30)
(3,7.75)
2. create FareByClass grouping by Pclass
FareByPclass: {group: chararray,FarePclass: {(Pclass: chararray,Fare: chararray)}}
3. get average
2014-08-28 20:56:23,288 ERROR org.apache.pig.tools.grunt.Grunt: ERROR 1045:
<file titanic_dypler_datafu.pig, line 36, column 56> Could not infer the matching function for org.apache.pig.builtin.SUM as multiple or none of them fit. Please use an explicit cast.
У меня есть этот скрипт, и я пытаюсь запустить последнюю строку. AvgFareByPclass = FOREACH FareByPclass GENERATE (float) SUM (FarePclass.Fare);
Я получаю эту ошибку при попытке ее запуска: Нельзя бросать мешок со схемой: bag {: tuple (Fare: chararray)} плавать.
Можете ли вы предложить, как бросить FarePclass.Fare? Мне что-то не хватает концептуально о том, как это сделать?
Спасибо, Джонатан, который решил мою проблему. И в случае, если кому-то интересно, средняя стоимость билета на билеты на «Титанике» составляет: Первый класс: 84,15 долларов США. Второй класс: 21,66 доллара США. Третий класс: 13,67 доллара. И BTW, мои первоначальные цели состояли в том, чтобы вычислить среднее значение, но я решил заставить SUM работать первым, если вы заметили несоответствие между именами и вызовами функций. Еще раз спасибо. – Jazzmine