Hi, guys,

I need to extend some array UDF in our project. and I designed a GenericUDF. However, it could not work as I expect.

here is the clause for creating table:

CREATE EXTERNAL TABLE doc PARTITIONED BY (doctype string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.thrift.ThriftSerDe'
WITH SERDEPROPERTIES (
"serialization.class" = "com.test.proto.Doc",
"serialization.format" = "org.apache.thrift.protocol.TBinaryProtocol")

I think I had specified the necessary param. it works well for any other hql stats. but when my udf ran, the serde altered, to LazySimpleSerde. here is output snippet of job tracker:

Caused by: java.lang.RuntimeException: java.lang.IllegalArgumentException: Can 
not set java.util.List field com.test.proto.doc.participant to java.lang.String
        at 
org.apache.hadoop.hive.serde2.objectinspector.ReflectionStructObjectInspector.getStructFieldsDataAsList(ReflectionStructObjectInspector.java:160)
        at 
org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe.serialize(LazySimpleSerDe.java:492)
        at 
org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe.serializeField(LazySimpleSerDe.java:396)
        at 
org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe.serialize(LazySimpleSerDe.java:383)
        at 
org.apache.hadoop.hive.ql.exec.FileSinkOperator.processOp(FileSinkOperator.java:564)
        at org.apache.hadoop.hive.ql.exec.Operator.process(Operator.java:471)
        at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:744)
        at 
org.apache.hadoop.hive.ql.exec.LimitOperator.processOp(LimitOperator.java:47)
        at org.apache.hadoop.hive.ql.exec.Operator.process(Operator.java:471)
        at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:744)
        at 
org.apache.hadoop.hive.ql.exec.SelectOperator.processOp(SelectOperator.java:84)
        at org.apache.hadoop.hive.ql.exec.Operator.process(Operator.java:471)
        at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:744)
        at 
org.apache.hadoop.hive.ql.exec.TableScanOperator.processOp(TableScanOperator.java:78)
        at org.apache.hadoop.hive.ql.exec.Operator.process(Operator.java:471)
        at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:744)
        at 
org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:529)

any clue?

BR.

-Bing

Reply via email to