[ 
https://issues.apache.org/jira/browse/HIVE-4494?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13650248#comment-13650248
 ] 

Phabricator commented on HIVE-4494:
-----------------------------------

pamelavagata has commented on the revision "HIVE-4494 [jira] ORC map columns 
get class cast exception in some context".

  Owen, I had previously investigated this issue and found that the reason for 
the ClassCastException was due to the following reason:

  in ObjectInspectorConverters.getConverter(ObjectInspector inputOI, 
ObjectInspector outputOI),
  there's a referential equality check to see if the inputOI is the same as the 
outputOI and returns a new Identity Converter. When running the same query with 
RC, you'll find that ColumnarSerde caches the the object inspectors and reuses 
them, which is why the referential equality check will pass and return an 
IdentityConverter instead of trying to cast to a Settable*ObjectInspector.

  If you cache the object inspectors in OrcStruct instead of having 
OrcList/OrcMap object inspectors inherit from Settable*ObjectInspector, it will 
fix the underlying issue. I hadn't gotten around to submitting a diff for this 
yet but would be happy to push one out in the next 2 days.

REVISION DETAIL
  https://reviews.facebook.net/D10653

To: JIRA, omalley
Cc: pamelavagata

                
> ORC map columns get class cast exception in some context
> --------------------------------------------------------
>
>                 Key: HIVE-4494
>                 URL: https://issues.apache.org/jira/browse/HIVE-4494
>             Project: Hive
>          Issue Type: Bug
>            Reporter: Owen O'Malley
>            Assignee: Owen O'Malley
>         Attachments: HIVE-4494.D10653.1.patch
>
>
> Setting up the test case like:
> {quote}
> create table map_text (
>   name string,
>   m map<string,string>
> ) row format delimited
>     fields terminated by '|'
>     collection items terminated by ','
>     map keys terminated by ':';
> create table map_orc (
>   name string,
>   m map<string,string>
> ) stored as orc;
> cat map.txt
> name1|key11:value11,key12:value12,key13:value13
> name2|key21:value21,key22:value22,key23:value23
> name3|key31:value31,key32:value32,key33:value33
> load data local       inpath 'map.txt' into table map_text;
> insert overwrite table map_orc select * from map_text;
> {quote}
> Selecting the name column from orc_map will get the following exception:
> {quote}
> java.lang.RuntimeException: Error in configuring object
>       at 
> org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:93)
>       at 
> org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:64)
>       at 
> org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117)
>       at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:431)
>       at org.apache.hadoop.mapred.MapTask.run(MapTask.java:371)
>       at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
>       at java.security.AccessController.doPrivileged(Native Method)
>       at javax.security.auth.Subject.doAs(Subject.java:396)
>       at 
> org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1195)
>       at org.apache.hadoop.mapred.Child.main(Child.java:249)
> Caused by: java.lang.reflect.InvocationTargetException
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:597)
>       at 
> org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:88)
>       ... 9 more
> Caused by: java.lang.RuntimeException: Error in configuring object
>       at 
> org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:93)
>       at 
> org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:64)
>       at 
> org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117)
>       at org.apache.hadoop.mapred.MapRunner.configure(MapRunner.java:34)
>       ... 14 more
> Caused by: java.lang.reflect.InvocationTargetException
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:597)
>       at 
> org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:88)
>       ... 17 more
> Caused by: java.lang.RuntimeException: Map operator initialization failed
>       at 
> org.apache.hadoop.hive.ql.exec.ExecMapper.configure(ExecMapper.java:121)
>       ... 22 more
> Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: 
> java.lang.ClassCastException: 
> org.apache.hadoop.hive.ql.io.orc.OrcStruct$OrcMapObjectInspector cannot be 
> cast to 
> org.apache.hadoop.hive.serde2.objectinspector.SettableMapObjectInspector
>       at 
> org.apache.hadoop.hive.ql.exec.MapOperator.setChildren(MapOperator.java:522)
>       at 
> org.apache.hadoop.hive.ql.exec.ExecMapper.configure(ExecMapper.java:90)
>       ... 22 more
> Caused by: java.lang.ClassCastException: 
> org.apache.hadoop.hive.ql.io.orc.OrcStruct$OrcMapObjectInspector cannot be 
> cast to 
> org.apache.hadoop.hive.serde2.objectinspector.SettableMapObjectInspector
>       at 
> org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorConverters.getConverter(ObjectInspectorConverters.java:144)
>       at 
> org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorConverters$StructConverter.<init>(ObjectInspectorConverters.java:307)
>       at 
> org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorConverters.getConverter(ObjectInspectorConverters.java:138)
>       at 
> org.apache.hadoop.hive.ql.exec.MapOperator.initObjectInspector(MapOperator.java:270)
>       at 
> org.apache.hadoop.hive.ql.exec.MapOperator.setChildren(MapOperator.java:482)
>       ... 23 more
> {quote}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to