Macros 当宏使用两次时,pig脚本失败

Macros 当宏使用两次时,pig脚本失败,macros,apache-pig,bigdata,Macros,Apache Pig,Bigdata,我有一个pig脚本,它使用一个宏两次,使用相同的关系,但参数不同;对于每次使用,我在不同的字段上过滤相同的关系。宏的形状如下所示: DEFINE doubleGroupJoin (mainField, mainRelation) returns out { valid = FILTER $mainRelation BY $mainField != ''; r1 = FOREACH (GROUP valid BY $mainField) GENERATE

我有一个pig脚本,它使用一个宏两次,使用相同的关系,但参数不同;对于每次使用,我在不同的字段上过滤相同的关系。宏的形状如下所示:

DEFINE doubleGroupJoin (mainField, mainRelation) returns out {
    valid = FILTER $mainRelation BY $mainField != '';
    r1 = FOREACH (GROUP valid BY $mainField) GENERATE 
            field1_1, field1_2, ...;
    r2 = FOREACH (GROUP valid BY ($mainField, otherfield1, ...) GENERATE
            field2_1, field2_2, ...;
    $out = FOREACH (JOIN R1 BY field1_1, R2 BY field1_2) GENERATE
            final1, final2, ...; 
}
在脚本中,我有以下内容:

-- Output1
finalR1 = doubleGroupJoin('field1', initialData);
STORE finalR1 INTO '$output/R1';
-- Output2
finalR2 = doubleGroupJoin('field2', initialData);
STORE finalR2 INTO '$output/R2';
如果我注释掉Output1或Output2块,作业工作正常,但如果我尝试同时使用这两个块,则会出现以下错误:

java.lang.ClassCastException: org.apache.pig.data.BinSedesTuple cannot be cast to java.lang.String
    at org.apache.pig.backend.hadoop.HDataType.getWritableComparableTypes(HDataType.java:106)
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapReduce$Map.collect(PigGenericMapReduce.java:111)
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapBase.runPipeline(PigGenericMapBase.java:284)
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapBase.map(PigGenericMapBase.java:277)
    at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapBase.map(PigGenericMapBase.java:64)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:212)

这里使用Pig 0.12.0。有没有关于为什么会发生这种情况的建议

进一步的调查得出结论,问题似乎出在代码的连接部分,尽管我无法确定为什么我能够使用命令行中的-no_multiquery选项绕过这个问题,虽然我仍然不确定问题的起因,但您可以使用-dryrun选项检查生成了什么。不过看起来很奇怪