10 zu übergeben Ich habe master.txt, die 10K Datensätze hat, so wird jede Zeile davon ein Tupel sein & ganze derselben muss an Python UDF übergeben werden. Da es mehrere Datensätze enthält, wird beim Speichern von p2preportmap der folgende Fehler angezeigt. Bitte helfenNicht möglich, Schwein Tupel zu Python UDF
Fehler ist wie folgt:
kann nicht Iterator für alias p2preportmap öffnen. Backend-Fehler: org.apache.pig.backend.executionengine.ExecException: Fehler 0: Skalar hat mehr als eine Zeile in der Ausgabe. 1.: (010301, MTS, MM), 2. : (010B06, MTS, TN) (gemeinsame Ursache: "JOIN", dann "FOREACH ... GENERATE foo.bar" sollte "foo :: bar" sein)
Pig Script ist wie folgt:
REGISTER 'smsiuc_udf.py' using streaming_python as smsiuc_udfs;
cdrs = load '2016040111*' USING PigStorage('|','-tagFile') ;
mastergtrec = load 'master.txt' USING PigStorage(',','-tagFile');
mastergt = FOREACH mastergtrec GENERATE (chararray) UPPER($1) as opcdpc, (chararray) UPPER($2) as gtoptname,(chararray) UPPER($3) as gtoptcircle;
mastergttup = FOREACH mastergt generate TOTUPLE(opcdpc,gtoptname,gtoptcircle) as mstgttup;
cdrrecord = FOREACH cdrs GENERATE (chararray) UPPER($1) as aparty, (chararray) UPPER($2) as bparty,$3 as smssentdate,$4 as smssenttime,($29=='6' ? 'S' : 'F') as status,(chararray) UPPER($26) as srcgt,(chararray) UPPER($27) as destgt,($12=='405899136999995' ? 'MTSDEL-CDMA' : ($12=='919875089998' ? 'MTSRAJ-GSM' : ($12=='405899150999995' ? 'MTSCHN-CDMA' : $12))) as smscgt, (chararray)$0 as cdrfname,(chararray) $13 as prepost;
filteredp2pcdrs = FILTER cdrrecord by smsiuc_udfs.pullp2pcdrs(aparty,bparty,srcgt,destgt) and status == 'S' and SUBSTRING(smssentdate,4,6) == '$MON';
groupp2pcdrs = GROUP filteredp2pcdrs by (srcgt,destgt,aparty,bparty,smscgt,status,prepost);
distinctp2pcdrs= FOREACH groupp2pcdrs {
uniq = DISTINCT filteredp2pcdrs.(srcgt,destgt,aparty,bparty,smscgt,status,prepost);
GENERATE FLATTEN(group),COUNT(uniq) as cnt;
};
p2preportmap = FOREACH distinctp2pcdrs GENERATE smsiuc_udfs.p2preport(srcgt,destgt,aparty,bparty,mastergttup),smscgt,status,prepost,cnt
Unfähig zu verstehen , können Sie bitte erklären ... – Amit
Problem hier ist, haben Sie mehrere Datensätze in Ihrer Beziehung p2preportmap Sie sollten sie zu einem kombinieren dies kann durch obigen Befehl oder einfacher getan werden ist gruppiert = Gruppe p2preportmap von 1; Jetzt können Sie gruppiert in die udf gehen –
Also du meinst zu sagen, dass ich Gruppe auf mastergt shud wie dummy = foreach mastergtrec 1, opcdpc, gtoptname, gtopcircle & dann gruppiert = Gruppe dummy von opcdpc. – Amit