2016-04-05 2 views
0

У меня есть назначение из класса, чтобы найти количество записей, отфильтрованных по определенному условию.apache pig count не работает, DUMP не работает

Моя проблема, поскольку ниже мой набор данных имеет следующую схему.

data1 = LOAD '/answers.csv' USING PigStorage(',') AS (qid:long,qt:long,tag:chararray,at:long); 

qid = question ID, qt = question start time(in epoch time), at = answer end time(in epoch time); 

Пример набора данных:

зп QID кварты тег в

1 563355 1235000081 PHP, ошибка, Gd, обработки изображений 1235000501

2 563355 1235000081 PHP, ошибка, Gd, обработка изображений 1235000551

3 563356 1235000140 lisp, схема, субъект, clojure 1235000177

4 563356 1235000140 шепелявила, схема, субъективно, Clojure 1235001545

5 563356 1235000140 шепелявила, схема, субъективно, Clojure 1235002457

6 563356 1235000140 шепелявила, схема, субъективно, Clojure 1235002809

7 563356 1235000140 шепелявила, схема, субъективно, Clojure 1235003266

8 563356 1235000140 шепелявила, схема, субъективно, Clojure 1235007817

9 563356 1235000140 шепелявила, схема , Субъективное, Clojure 1235007913

10 563356 1235000140 шепелявость, схема, субъективны, Clojure 1235020626

11 563356 1235000140 шепелявость, схема, субъективны, Clojure 1235040652

Нужно найти число вопрос ответил в 1hr.

подход: PIG версия 0.15.0

найти разностные часов между КТ и на

A = FOREACH data1 GENERATE HoursBetween(ToDate(qt),ToDate(at)) AS diffhours; 

B = FOREACH (FILTER A BY diffhours < 1) GENERATE diffhours; 

C = GROUP B ALL; 

D = FOREACH C GENERATE COUNT(B.diffhours) ; 

Но когда я свалка D работа завершается с ниже комментарием:

2016-04-06 01:13:17,736 [LocalJobRunner Map Task Executor #0] WARN org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigHadoopLogger - org.apache.pig.builtin.Utf8StorageConverter(FIELD_DISCARDED_TYPE_CONVERSION_FAILED): Unable to interpret value [112, 114, 111, 103, 114, 97, 109, 109, 105, 110, 103] in field being converted to int, caught NumberFormatException <For input string: "programming"> field discarded 
2016-04-06 01:13:17,736 [LocalJobRunner Map Task Executor #0] WARN org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigHadoopLogger - org.apache.pig.builtin.Utf8StorageConverter(FIELD_DISCARDED_TYPE_CONVERSION_FAILED): Unable to interpret value [115, 117, 98, 106, 101, 99, 116, 105, 118, 101, 34] in field being converted to int, caught NumberFormatException <For input string: "subjective""> field discarded 

в конец я получаю эти ...

Pig Stack Trace 
--------------- 
ERROR 1200: <line 6, column 0> Syntax error, unexpected symbol at or near 'D' 

Failed to parse: <line 6, column 0> Syntax error, unexpected symbol at or near 'D' 
    at org.apache.pig.parser.QueryParserDriver.parse(QueryParserDriver.java:244) 
    at org.apache.pig.parser.QueryParserDriver.parse(QueryParserDriver.java:182) 
    at org.apache.pig.PigServer$Graph.validateQuery(PigServer.java:1707) 
    at org.apache.pig.PigServer$Graph.registerQuery(PigServer.java:1680) 
    at org.apache.pig.PigServer.registerQuery(PigServer.java:623) 
    at org.apache.pig.tools.grunt.GruntParser.processPig(GruntParser.java:1082) 
    at org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:505) 
    at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:230) 
    at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:205) 
    at org.apache.pig.tools.grunt.Grunt.run(Grunt.java:66) 
    at org.apache.pig.Main.run(Main.java:565) 
    at org.apache.pig.Main.main(Main.java:177) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.hadoop.util.RunJar.run(RunJar.java:221) 
    at org.apache.hadoop.util.RunJar.main(RunJar.java:136) 
================================================================================ 
Pig Stack Trace 
--------------- 
ERROR 1066: Unable to open iterator for alias D 

org.apache.pig.impl.logicalLayer.FrontendException: ERROR 1066: Unable to open iterator for alias D 
    at org.apache.pig.PigServer.openIterator(PigServer.java:935) 
    at org.apache.pig.tools.grunt.GruntParser.processDump(GruntParser.java:754) 
    at org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:376) 
    at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:230) 
    at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:205) 
    at org.apache.pig.tools.grunt.Grunt.run(Grunt.java:66) 
    at org.apache.pig.Main.run(Main.java:565) 
    at org.apache.pig.Main.main(Main.java:177) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.hadoop.util.RunJar.run(RunJar.java:221) 
    at org.apache.hadoop.util.RunJar.main(RunJar.java:136) 
Caused by: java.io.IOException: Job terminated with anomalous status FAILED 
    at org.apache.pig.PigServer.openIterator(PigServer.java:927) 
    ... 13 more 

Я не могу понять проблему.

+0

Как ваши данные выглядят? Добавьте в свой вопрос несколько исходных данных. – ninja123

ответ

0
D = FOREACH C GENERATE COUNT(B); 
+0

Просьба рассказать о том, как этот код отвечает на вопрос (этот ответ был в очереди проверки низкого качества сообщений). – JAL

0

В GROUP оператор объединяет кортежи, которые имеют один и тот же ключ группы (ключевое поле).

Использование COUNT Функция заключается в вычислении количества элементов в сумке. COUNT требует выполнения предшествующего оператора GROUP ALL для глобальных подсчетов и оператора GROUP BY для подсчета групп.

В вашем случае, если вы звоните рассчитывать на B, где данные filtered и не grouped by

Вы должны вызвать COUNT на переменном, где группируются данные.

D = FOREACH C GENERATE COUNT(B.diffhours); 
+0

Итак, вы хотите сказать, что это должно быть D = FOREACH C GENERATE COUNT (C.diffhours); .... ????? – sabby

2

Вложенные запятые в поле тега вызывает все вопросы. Поскольку вы указали только четыре поля в схеме, Pig не может прочитать данные с помощью вашей определенной схемы.

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

Используйте CSVExcelStorage() Piggybank, который позаботится обо всех встроенных запятых в полях.

REGISTER /usr/lib/pig/piggybank.jar; 
DEFINE CSVExcelStorage org.apache.pig.piggybank.storage.CSVExcelStorage; 
data1 = LOAD '/answers.csv' USING CSVExcelStorage(); 

Затем выполните оставшуюся часть вашего скрипта. Это даст вам ожидаемые результаты.

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