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
> <[email protected] <mailto:[email protected]>> 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
