[ https://issues.apache.org/jira/browse/PIG-517?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Olga Natkovich updated PIG-517: ------------------------------- Resolution: Fixed Status: Resolved (was: Patch Available) patch committed; thanks, pradeep > Custom Loader Function which takes in a constructor argument fails during > typecast > ---------------------------------------------------------------------------------- > > Key: PIG-517 > URL: https://issues.apache.org/jira/browse/PIG-517 > Project: Pig > Issue Type: Bug > Affects Versions: types_branch > Reporter: Viraj Bhat > Assignee: Pradeep Kamath > Fix For: types_branch > > Attachments: phonenumber.txt, PIG-517.patch, RegexLoader.java > > > I have a custom loader function, known as RegexLoader that parses a line of > input into fields using regex and then sets the fields. This RegexLoader > extends Utf8StorageConverter and implements the LoadFunc. It takes in a > constructor argument a regex string supplied by the user. > The following piece of code, works when the loaded fields are not typecasted. > {code} > REGISTER pigudf2.0/java/build/loader.jar > fullfile = load 'phonenumber.txt' > using loader.RegexLoader('4*8') > as (a,z,n) ; > -- project required fields > phonerecords = foreach fullfile { > generate > a as area, > z as zone, > n as number; > } > dump phonerecords; > {code} > But when the alias a is cast to int, the piece of script fails with the error > java.io.IOException: Unable to open iterator for alias: phonerecords [Unable > to store for alias: phonerecords [could not instantiate 'loader.RegexLoader' > with arguments 'null']] > {code} > REGISTER pigudf2.0/java/build/loader.jar > fullfile = load 'phonenumber.txt' > using loader.RegexLoader('4*8') > as (a,z,n) ; > -- project required fields > phonerecords = foreach fullfile { > generate > (int)a as area, > z as zone, > n as number; > } > dump phonerecords; > {code} > Full stack trace of the error: > ================================================================================================================== > java.io.IOException: Unable to open iterator for alias: phonerecords [Unable > to store for alias: phonerecords [could not instantiate 'loader.RegexLoader' > with arguments 'null']] > at > org.apache.pig.impl.PigContext.instantiateFuncFromSpec(PigContext.java:448) > at > org.apache.pig.impl.PigContext.instantiateFuncFromSpec(PigContext.java:454) > at > org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POCast.instantiateFunc(POCast.java:67) > at > org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POCast.setLoadFSpec(POCast.java:73) > at > org.apache.pig.backend.hadoop.executionengine.physicalLayer.LogToPhyTranslationVisitor.visit(LogToPhyTranslationVisitor.java:1157) > at org.apache.pig.impl.logicalLayer.LOCast.visit(LOCast.java:60) > at org.apache.pig.impl.logicalLayer.LOCast.visit(LOCast.java:28) > at > org.apache.pig.impl.plan.DependencyOrderWalkerWOSeenChk.walk(DependencyOrderWalkerWOSeenChk.java:68) > at > org.apache.pig.backend.hadoop.executionengine.physicalLayer.LogToPhyTranslationVisitor.visit(LogToPhyTranslationVisitor.java:805) > at org.apache.pig.impl.logicalLayer.LOForEach.visit(LOForEach.java:121) > at org.apache.pig.impl.logicalLayer.LOForEach.visit(LOForEach.java:40) > at > org.apache.pig.impl.plan.DependencyOrderWalker.walk(DependencyOrderWalker.java:68) > at org.apache.pig.impl.plan.PlanVisitor.visit(PlanVisitor.java:51) > at > org.apache.pig.backend.hadoop.executionengine.HExecutionEngine.compile(HExecutionEngine.java:232) > at org.apache.pig.PigServer.compilePp(PigServer.java:731) > at > org.apache.pig.PigServer.executeCompiledLogicalPlan(PigServer.java:644) > at org.apache.pig.PigServer.store(PigServer.java:452) > at org.apache.pig.PigServer.store(PigServer.java:421) > at org.apache.pig.PigServer.openIterator(PigServer.java:384) > at > org.apache.pig.tools.grunt.GruntParser.processDump(GruntParser.java:269) > at > org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:178) > at > org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:84) > at org.apache.pig.tools.grunt.Grunt.exec(Grunt.java:64) > at org.apache.pig.Main.main(Main.java:306) > Caused by: java.io.IOException: Unable to store for alias: phonerecords > [could not instantiate 'loader.RegexLoader' with arguments 'null'] > ... 24 more > Caused by: java.lang.RuntimeException: could not instantiate > 'loader.RegexLoader' with arguments 'null' > ... 24 more > Caused by: java.lang.InstantiationException: loader.RegexLoader > at java.lang.Class.newInstance0(Class.java:340) > at java.lang.Class.newInstance(Class.java:308) > at > org.apache.pig.impl.PigContext.instantiateFuncFromSpec(PigContext.java:418) > ... 23 more > ================================================================================================================== > Attaching the custom RegexLoader with this Jira -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.