2015-05-13 3 views
0

я анализирую лог-файлы пользователи кластера с помощью следующего кода в свинью:SUM, AVG, в Свинье не работает

 t_data = load 'log_flies/*' using PigStorage(','); 
    A = foreach t_data generate $0 as (jobid:int), 
$1 as (indexid:int), $2 as (clusterid:int), $6 as (user:chararray), 
$7 as (stat:chararray), $13 as (queue:chararray), $32 as (projectName:chararray), $52 as (cpu_used:float), $55 as (efficiency:float), $59 as (numThreads:int), 

$61 as (numNodes:int), $62 as (numCPU:int),$72 as (comTime:int), 
$73 as (penTime:int), $75 as (runTime:int), $52/($62*$75) as (allEff: float), SUBSTRING($68, 0, 11) as (endTime: chararray); 
    ---describe A; 
    A = foreach A generate jobid, indexid, clusterid, user, cpu_used, numThreads, runTime, allEff, endTime; 
    B = group A by user; 
    f_data = foreach B { 
      grp = group; 
      count = COUNT(A); 
      avg = AVG(A.cpu_used); 
      generate FLATTEN(grp), count, avg; 
     }; 
    f_data = limit f_data 10; 
    dump f_data; 

код работает для group and COUNT но когда я включаю AVG и SUM, он показывает ошибку:

ОШИБКА org.apache.pig.tools.grunt.Grunt - ОШИБКА 1066: Не удалось открыть итератор для псевдонима f_data

Я проверил типы данных , Все в порядке. Есть ли у вас какие-либо предложения, где я его пропустил? Спасибо заранее за вашу помощь.

+0

У вас есть отношение с именем A, вы можете изменить его и попробовать. –

+0

Я думаю, что такая же проблема происходит с COUNT –

+0

Извините, не COUNT, ее функция SUM –

ответ

1

Ошибка синтаксиса. Прочтите http://chimera.labs.oreilly.com/books/1234000001811/ch06.html#more_on_foreach (раздел: Вложенный foreach) для деталей.

Pig Script

A = LOAD 'a.csv' USING PigStorage(',') AS (user:chararray, cpu_used:float); 
    B = GROUP A BY user; 
    C = FOREACH B { 
    cpu_used_bag = A.cpu_used; 
    GENERATE group AS user, AVG(cpu_used_bag) AS avg_cpu_used, SUM(cpu_used_bag) AS total_cpu_used; 
    }; 

Вход: a.csv

a,3 
a,4 
b,5 

Выход:

(a,3.5,7.0) 
(b,5.0,5.0) 
+0

Спасибо, что он работает сейчас, но мне пришлось переместить еще один шаг. – Aarav

0

Ваша свинья полна е rrors

  • не использовать одинаковый Alias ​​на обеих сторонах =;
  • с использованием PigLoader() как (укажите вашу схему соответствующим образом);

    A = foreach A generate jobid, indexid, clusterid, user, cpu_used, numThreads, runTime, allEff, endTime; 
    

    изменить это F = Еогеасп A генерируют JobID, IndexID, Кластерный, пользователь, cpu_used, numThreads, RUNTIME, allEff, EndTime;

    f_data = limit f_data 10; ИЗМЕНИТЬ левый F_data с другим именем.

    Остановить вашу жизнь комплекс. Общее правило отладки Pigscript

    • работать в локальном режиме
    • свалка после everyline

    Написал образец свинью, чтобы имитировать ур свинью: (рабочий)

t_data = нагрузка './file', используя PigStorage (',') as (jobid: int, cpu_used: float);

 C = foreach t_data generate jobid, cpu_used ; 
     B = group C by jobid ; 
     f_data = foreach B { 
       count = COUNT(C); 
       sum = SUM(C.cpu_used); 
       avg = AVG(C.cpu_used); 
       generate FLATTEN(group), count,sum,avg; 
      }; 
     never_f_data = limit f_data 10; 

    dump never_f_data; 
Смежные вопросы