Apache Pig: проблема при обработке типа данных в Pig - PullRequest
0 голосов
/ 31 января 2019

Я столкнулся с проблемой при обработке типа данных для поля qty и выполнении SUM для того же поля.Ниже приведен код.Я преобразовал qty в double, но все еще получаю ошибку, упомянутую ниже.Может ли кто-нибудь помочь мне разобраться в этой проблеме и, если возможно, в решении?

A_test1 = load'EXT_OO_IMP' USING PigStorage('\u0001') AS (it: chararray,loc: chararray,qty: chararray,scheddate: chararray,udc_cta_no: chararray,udc_imp_pack_qty: chararray,udc_imp_ready_dt: chararray,udc_imp_ref_no: chararray,udc_ord_sys_cd: chararray,udc_source: chararray,udc_sply_typ: chararray,udc_vend_pack_id: chararray,udc_purch_stg: chararray,srs_pack_flow_indicator_cd: chararray,it_type_cd: chararray,source_owner_cd: chararray,nks_id: chararray,alloc_replen_cd: chararray);

----- ext_oo_import: {it: chararray,loc: chararray,qty: chararray,scheddate: chararray,udc_cta_no: chararray,udc_imp_pack_qty: chararray,udc_imp_ready_dt: chararray,udc_imp_ref_no: chararray,udc_ord_sys_cd: chararray,udc_source: chararray,udc_sply_typ: chararray,udc_vend_pack_id: chararray,udc_purch_stg: chararray,srs_pack_flow_indicator_cd: chararray,it_type_cd: chararray,source_owner_cd: chararray,nks_id: chararray,alloc_replen_cd: chararray}

----- ##############  ##############  ##############

import_on_order = 
        FOREACH A_test1
        GENERATE
            loc,
            it,
            nks_id,
            (double)(qty is NULL ? 0 : qty) as qty:double,
            scheddate,
            ' ' AS order_source,
            ' ' AS chs_it_type_cd;

describe import_on_order;

----- import_on_order: {loc: chararray,it: chararray,nks_id: chararray,qty: int,scheddate: chararray,order_source: chararray,chs_it_type_cd: chararray}


grp_import_on_order = GROUP import_on_order BY (loc,it,nks_id,scheddate,order_source,chs_it_type_cd);


describe grp_import_on_order;

----- grp_import_on_order: {group: (loc: chararray,it: chararray,nks_id: chararray,scheddate: chararray,order_source: chararray,chs_it_type_cd: chararray),import_on_order: {(loc: chararray,it: chararray,nks_id: chararray,qty: int,scheddate: chararray,order_source: chararray,chs_it_type_cd: chararray)}}



------------------------------- STORE TO FILE ---------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------

work__idrp_import_on_order =
                            FOREACH grp_import_on_order 
                            GENERATE    group.loc AS loc,
                                        group.it AS it,
                                        group.nks_id AS nks_id,
                                        SUM(import_on_order.qty) AS qty,
                                        group.scheddate AS scheddate,
                                        group.order_source AS order_source,
                                        group.chs_it_type_cd AS chs_it_type_cd;

describe work__idrp_import_on_order;

----- work__idrp_import_on_order: {loc: chararray,it: chararray,nks_id: chararray,qty: int,scheddate: chararray,order_source: chararray,chs_it_type_cd: chararray}

import_on_order_rp = 
        FOREACH ext_oo_import
        GENERATE
            it AS chs_it,
            loc AS chs_loc,
            (qty is NULL ? 0 : qty) as qty:double,
            scheddate AS current_due_dt, 
            ' ' AS order_source,
            'V' AS source_type_cd,
            udc_sply_typ AS sply_typ,
            udc_ord_sys_cd AS ord_sys_cd;

2019-01-31 09: 03: 30,819 [main] ОШИБКА org.apache.pig.tools.grunt.GruntParser - ОШИБКА 0: Исключительная ситуация во время выполнения (Имя: grp_import_on_order: Локальная перестановка [tuple] {tuple} (ложь) - scope-1095 Ключ оператора: scope-1095): org.apache.pig.backend.executionengine.Exectionengine.ExecException: ERROR0: Исключительная ситуация при выполнении (Имя: work__idrp_import_on_order: New For Each (false, false) [bag] - scope-1078 Ключ оператора: scope-1078): org.apache.pig.backend.executionengine.ExecException: ОШИБКА 0: Исключительная ситуация приexecuting (Имя: локальная перестановка перед Combiner [tuple] {Неизвестно} - scope-1097 Ключ оператора: scope-1097): org.apache.pig.backend.executionengine.ExecException: ERROR 0: Исключительная ситуация при выполнении (Name: import_on_order: NewДля каждого (ложь, ложь, ложь, ложь, ложь, ложь, ложь) [bag] - scope-977 Ключ оператора: scope-977): org.apache.pig.backend.executionengine.ExecException: ОШИБКА 0: Исключение при выполнении(Имя: ext_oo_import: New For Each (false, false, false, false, false) [bag] - scope-957 Ключ оператора: scope-957): org.apache.pig.backend.executionengine.ExecException: ERROR 0: Exceptionво время выполнения (Имя: New For Each (false, false, false, false, false) [bag] - scope-945 Ключ оператора: scope-945): org.apache.pig.backend.executionengine.ExecException: ERROR 0: Exceptionпри выполнении [POCast (Имя: Cast [double] - ключ оператора scope-926: scope-926) children: [[POProject (Имя: Project [chararray] [2] - ключ оператора scope-925: scope-925) children:null at []]] at []]: java.lang.ClassCastException: java.lang.Integer не может быть приведен к java.lang.String Сведения в файле журнала: /logs/hdidrp/pig/pig_1548942743751.log 2019-01-3109: 03: 30,849 [main] ИНФОРМАЦИЯ org.apache.hadoop.conf.Configuration.deprecation - fs.default.name устарело.Вместо этого используйте fs.defaultFS 2019-01-31 09: 03: 31,012 [main] WARN org.apache.pig.PigServer - Обнаружено предупреждение IMPLICIT_CAST_TO_DOUBLE 1 раз.import_on_order_rp: {shc_item: chararray, shc_loc: chararray, кол-во: double, current_due_dt: chararray, order_source: chararray, source_type_cd: chararray, sply_typ: chararray, ord_sys_cd: charar} 2019-01R31 09: 03 или 31: 09: 03 или 33: 09: 03 или 33: 09.apache.pig.tools.grunt.GruntParser - ОШИБКА 0: Исключительная ситуация при выполнении (Имя: grp_import_on_order: Локальная перестановка [tuple] {tuple} (false) - ключ оператора scope-1095: scope-1095): org.apache.pig.backend.executionengine.ExecException: ОШИБКА 0: Исключительная ситуация при выполнении (Имя: work__idrp_import_on_order: New For Each (false, false) [bag] - scope-1078 Ключ оператора: scope-1078): org.apache.pig.backend.executionengine.ExecException: ОШИБКА 0: Исключительная ситуация при выполнении (Имя: локальная перестановка перед объединением [tuple] {Неизвестно} - scope-1097 Ключ оператора: scope-1097): org.apache.pig.backend.executionengine.ExecException: ОШИБКА 0: Исключительная ситуацияво время выполнения (Имя: import_on_order: New For Each (false, false, false, false, false, false, false) [bag] - scope-977 Ключ оператора: scope-977): org.apache.pig.backend.executionengine.ExecException: ОШИБКА 0: Исключительная ситуация при выполнении (Имя: ext_oo_import: New For Each (false, false, false, false, false) [bag] - scope-957 Ключ оператора: scope-957): org.apache.pig.backend.executionengine.ExecException: ОШИБКА 0: Исключительная ситуация при выполнении (Имя: New For Each (false, false, false, false, false) [bag] - scope-945 Ключ оператора: scope-945): org.apache.pig.backend.executionengine.ExecException: ОШИБКА 0: Исключительная ситуация при выполнении [POCast (Имя: Cast [double] - ключ оператора scope-926: scope-926) детей: [[POProject (Имя: Project [chararray)] [2] - ключ оператора scope-925: scope-925) children: null at []]] at []]: java.lang.ClassCastException: java.lang.Integer не может быть приведен к java.lang.String

1 Ответ

0 голосов
/ 31 января 2019

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

import_on_order_rp = FOREACH ext_oo_import Генерировать его как chs_it, loc AS как chs_loc, (qty равно NULL? 0: qty) как qty: double, scheddate AS current_due_dt, '' order_source, 'V' AS source_type_cd, udc_sply_typ AS sply_typ, udc_ord_sys_cd AS ord_sys_cd;

Проверьте, является ли это правильным случаем.

...