Uploaded image for project: 'Crunch (Retired)'
  1. Crunch (Retired)
  2. CRUNCH-338

TupleDeepCopier throws java.lang.ClassCastException: java.util.ArrayList cannot be cast to org.apache.avro.generic.IndexedRecord

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 0.8.2
    • 0.10.0, 0.8.3
    • Core
    • None

    Description

      when PTable<String, TupleN> using twice and performing parallelDo causing java.lang.ClassCastException; when the same PTable<String, TupleN> used once for parallelDo not causing the exception or turning PTable<String,TupleN> to PTable<String, Pair<Tuple4.Collect<?, ?, ?, ?>, Tuple3.Collect<?, ?, ?>>> and using paired PTable twice for parallelDo not causing any exception.

      Note : The root cause seem's expressing the items passed to the TupleN is collection or a single instance. Suprisingly when we are performing parallelDo operation once on PTable<String, TupleN> is working with no exceptions and when performing parallelDo twice seem's try to make use of TupleDeepCopier.deepCopy; which is triggering the exception.

      Template of Code :

      Failure case :

      PTable<String, TupleN> entityData = .....;
      entityData.parallelDo(.....);
      entityData.parallelDo(.....);

      Success Case :

      PTable<String, TupleN> entityData = .....;
      entityData.parallelDo(.....);

      Another success case :

      PTable<String, Pair<Tuple4.Collect<?, ?, ?, ?>, Tuple3.Collect<?, ?, ?>>> entityData;
      entityData.parallelDo(.....);
      entityData.parallelDo(.....);

      stack trace for reference :

      org.apache.crunch.CrunchRuntimeException: Error while deep copying avro value [.........]
      at org.apache.crunch.types.avro.AvroDeepCopier.deepCopy(AvroDeepCopier.java:195)
      at org.apache.crunch.types.avro.AvroDeepCopier$AvroSpecificDeepCopier.deepCopy(AvroDeepCopier.java:83)
      at org.apache.crunch.types.avro.AvroType.getDetachedValue(AvroType.java:217)
      at org.apache.crunch.types.TupleDeepCopier.deepCopy(TupleDeepCopier.java:60)
      at org.apache.crunch.types.TupleDeepCopier.deepCopy(TupleDeepCopier.java:32)
      at org.apache.crunch.types.avro.AvroType.getDetachedValue(AvroType.java:217)
      at org.apache.crunch.lib.PTables.getDetachedValue(PTables.java:191)
      at org.apache.crunch.types.avro.AvroTableType.getDetachedValue(AvroTableType.java:149)
      at org.apache.crunch.types.avro.AvroTableType.getDetachedValue(AvroTableType.java:36)
      at org.apache.crunch.impl.mr.emit.IntermediateEmitter.emit(IntermediateEmitter.java:54)
      at org.apache.crunch.MapFn.process(MapFn.java:34)
      at org.apache.crunch.impl.mr.run.RTNode.process(RTNode.java:99)
      at org.apache.crunch.impl.mr.emit.IntermediateEmitter.emit(IntermediateEmitter.java:56)
      at org.apache.crunch.MapFn.process(MapFn.java:34)
      at org.apache.crunch.impl.mr.run.RTNode.process(RTNode.java:99)
      at org.apache.crunch.impl.mr.run.RTNode.processIterable(RTNode.java:114)
      at org.apache.crunch.impl.mr.run.CrunchReducer.reduce(CrunchReducer.java:57)
      at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:164)
      at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:610)
      at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:444)
      at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:447)

      Attachments

        1. stack-trace.log
          15 kB
          Laxmikanth Samudrala
        2. ClassCastExceptionInDeepCopierIT.java
          4 kB
          Gabriel Reid
        3. CRUNCH-338.patch
          5 kB
          Gabriel Reid

        Activity

          People

            gabriel.reid Gabriel Reid
            laxmikanth.s Laxmikanth Samudrala
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: