2013-06-11 4 views
-1

Я пробовал свинью в течение нескольких дней, и я не понимаю его. Я стараюсь выполнять простые практические задания, но безрезультатно. Цель состоит в том, чтобы создать запись, которая показывает максимальный пробег для каждого идентификатора в год. Так что я начал с:Ошибка (ы) при выполнении простой задачи свиньи

A = LOAD 'pig/input/Batting.csv' using PigStorage(',') as (ID:int, year:int, stint:chararray, team:chararray, league:chararray, games:int, games_bat:int, atbat:int, runs:int); B = GROUP A by year; C = FOREACH B generate group, MAX(A.runs) as maxruns;

я предполагал все шло хорошо вплоть до этого момента, но тогда он был совершенно перепутались, когда:

D = JOIN A by year, C by year; E = FOREACH D generate group, D.(group, ID), maxruns; store E into 'batting_result';

какие-либо советы или идеи, на каком направлении идти к будет очень признателен.

+0

Какой результат вы ожидали? Что ты получил? Были ли ошибки? –

+0

Я немного приспособил его, и я думаю, что получил немного дальше. До сих пор это выглядит так: 'A = LOAD 'pig/input/Batting.csv' using PigStorage (',') as (ID: int, year: int, stint: chararray, team: chararray, limague: chararray, игры: int, games_bat: int, atbat: int, run: int); B = ГРУППА А по году; C = группа FOREACH B, MAX (A.runs) AS maxruns: int; D = ПРИСОЕДИНЯЙСЯ A пробегами, C максрунами; E = FOREACH D сгенерирует группу, ID, maxruns; дампа Е; ' На выходе я получаю (1893, 149) (1893, 149) т.д. Тем не менее, что среднее пространство должно показать идентификатор для соответствующего "maxruns", вместо того, чтобы его ничего не показывает. – Mako

ответ

0

Предполагая, что вы используете аналогичный dataset, одна из проблем может заключаться в том, что первый столбец (playerId) из файла csv является chararrray, а не int.

Я думаю, что может быть что-то не так с вашим соединением (в запросе свиньи, написанном в вашем комментарии).

Соотношение C, имеет две колонки группы/год и максруны. Чтобы получить playerId от A, мы должны присоединиться к году и работать. Итак, ваше отношение D должно выглядеть

D = JOIN A by (year,runs), C by (group,maxruns); 

С учетом этого изменения, вы должны получить за каждый год, максимум работает в том же году, и игрок ID игрока.

Надеюсь, что помогло

Смежные вопросы