Sorry for a late reply. Could you share a complete, reproducible example? I am mostly interested in where do you get the input RAW('java.util.Map', '...') type that you are passing into your UDF.
Raw types are equal/equivalent only if both the class and the serializer are equal. A side note: Have you tried using the MAP type instead of RAW('java.util.Map', '...')? Why did you decide to use a RAW type in your case? Best, Dawid On 28/10/2020 00:23, Steve Whelan wrote: > Hi Dawid, > > I added `/bridgedTo = Map.class/` as you suggested and got a slightly > different exception. I also tried passing a rawSerializer (an > implementation similar to MapSerializer[1] with String type key and > value) but got the same exception as without it. I am using Flink > v1.11 for reference. > > > @FunctionHint( > input = { > @DataTypeHint(value="RAW", bridgedTo=Map.class, > rawSerializer=MyMapSerializer.class), > @DataTypeHint("STRING") > }, > output = @DataTypeHint("STRING") > ) > public static String eval(final Object map, final String key) > > > *Exception:* > > Caused by: org.apache.flink.table.api.ValidationException: Invalid > input arguments. Expected signatures are: > MAP_VALUE(RAW('java.util.Map', '...'), STRING) > at > org.apache.flink.table.types.inference.TypeInferenceUtil.createInvalidInputException(TypeInferenceUtil.java:190) > at > org.apache.flink.table.planner.functions.inference.TypeInferenceOperandChecker.checkOperandTypesOrError(TypeInferenceOperandChecker.java:131) > at > org.apache.flink.table.planner.functions.inference.TypeInferenceOperandChecker.checkOperandTypes(TypeInferenceOperandChecker.java:89) > ... 49 more > Caused by: org.apache.flink.table.api.ValidationException: Invalid > argument type at position 0. Data type RAW('java.util.Map', '...') > expected but RAW('java.util.Map', ?) passed. > at > org.apache.flink.table.types.inference.TypeInferenceUtil.adaptArguments(TypeInferenceUtil.java:137) > at > org.apache.flink.table.types.inference.TypeInferenceUtil.adaptArguments(TypeInferenceUtil.java:102) > at > org.apache.flink.table.planner.functions.inference.TypeInferenceOperandChecker.checkOperandTypesOrError(TypeInferenceOperandChecker.java:126) > ... 50 more* > * > > > [1] > https://github.com/apache/flink/blob/release-1.11.0/flink-core/src/main/java/org/apache/flink/api/common/typeutils/base/MapSerializer.java > > On Tue, Oct 27, 2020 at 6:13 AM Dawid Wysakowicz > <dwysakow...@apache.org <mailto:dwysakow...@apache.org>> wrote: > > Hey Steve, > > You should be able to do via the bridgedTo parameter. You can > additionally specify a serializer you want to use via > rawSerializer parameter: > > @FunctionHint( > input = { > @DataTypeHint(value = "RAW", bridgedTo = > Map.class[, rawSerializer = ... ]), > @DataTypeHint("STRING")}, > output = @DataTypeHint("STRING") > ) > public static String eval(final Object map, final String key) > > Best, > > Dawid > > On 26/10/2020 16:10, Steve Whelan wrote: >> Hi, >> >> I have a column of type *RAW('java.util.Map', ?)* that I want to >> pass to a scalar function UDF. I'm using DataTypeHints but >> hitting an exception. What would be the proper DataTypeHint and >> data type param to achieve this? >> >> @FunctionHint( >> input = {@DataTypeHint("RAW"), @DataTypeHint("STRING")}, >> output = @DataTypeHint("STRING") >> ) >> public static String eval(final Object map, final String key) { >> // business logic >> } >> >> >> *Exception:* >> * >> * >> Caused by: org.apache.flink.table.api.ValidationException: >> Invalid input arguments. Expected signatures are: >> MAP_VALUE(RAW('java.lang.Object', '...'), STRING) >> at >> >> org.apache.flink.table.types.inference.TypeInferenceUtil.createInvalidInputException(TypeInferenceUtil.java:190) >> at >> >> org.apache.flink.table.planner.functions.inference.TypeInferenceOperandChecker.checkOperandTypesOrError(TypeInferenceOperandChecker.java:131) >> at >> >> org.apache.flink.table.planner.functions.inference.TypeInferenceOperandChecker.checkOperandTypes(TypeInferenceOperandChecker.java:89) >> ... 50 more >> Caused by: org.apache.flink.table.api.ValidationException: >> Invalid argument type at position 0. Data type >> RAW('java.lang.Object', '...') expected but RAW('java.util.Map', >> ?) passed. >> at >> >> org.apache.flink.table.types.inference.TypeInferenceUtil.adaptArguments(TypeInferenceUtil.java:137) >> at >> >> org.apache.flink.table.types.inference.TypeInferenceUtil.adaptArguments(TypeInferenceUtil.java:102) >> at >> >> org.apache.flink.table.planner.functions.inference.TypeInferenceOperandChecker.checkOperandTypesOrError(TypeInferenceOperandChecker.java:126) >> ... 51 more* >> * >> >> >> Thank you, >> >> Steve >
signature.asc
Description: OpenPGP digital signature