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
>

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to