Flink flatMap 使用lambda表示式異常問題
程式碼示例:
.flatMap((FlatMapFunction<String, JSONObject>) (message, out) -> { String mes = message.replaceAll("\\\\", ""); if (StringUtils.isNotEmpty(mes)) { out.collect(JSON.parseObject(mes)); } }).name("主流格式化")
錯誤資訊:
Caused by: org.apache.flink.api.common.functions.InvalidTypesException: The generic type parameters of 'Collector' are missing. In many cases lambda methods don't provide enough information for automatic type extraction when Java generics are involved. An easy workaround is to use an (anonymous) class instead that implements the 'org.apache.flink.api.common.functions.FlatMapFunction' interface. Otherwise the type has to be specified explicitly using type information. at org.apache.flink.api.java.typeutils.TypeExtractionUtils.validateLambdaType(TypeExtractionUtils.java:371) at org.apache.flink.api.java.typeutils.TypeExtractionUtils.extractTypeFromLambda(TypeExtractionUtils.java:188) at org.apache.flink.api.java.typeutils.TypeExtractor.getUnaryOperatorReturnType(TypeExtractor.java:557) at org.apache.flink.api.java.typeutils.TypeExtractor.getFlatMapReturnTypes(TypeExtractor.java:174) at org.apache.flink.streaming.api.datastream.DataStream.flatMap(DataStream.java:612) at com.vsoc.realtime.schedule.check.EmulationRealCheckJob.main(EmulationRealCheckJob.java:127)
解決方案:
.flatMap((FlatMapFunction<String, JSONObject>) (message, out) -> { String mes = message.replaceAll("\\\\", ""); if (StringUtils.isNotEmpty(mes)) { out.collect(JSON.parseObject(mes)); } }).name("主流數式化") .returns(new TypeHint<JSONObject>() { })
錯誤原因:
這個錯誤是由於Flink在處理使用Java泛型的lambda表示式時,無法自動提取足夠的型別資訊。一個簡單的解決方法是使用一個實現了org.apache.flink.api.common.functions.FlatMapFunction介面的(匿名)類,而不是lambda表示式。否則,型別必須使用型別資訊明確指定
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024433/viewspace-2997754/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java lambda表示式基本使用Java
- lambda 表示式使用的方式
- lambda 表示式
- lambda表示式
- Java中Lambda表示式的使用Java
- 關於C++中在模板引數中使用Lambda表示式的問題C++
- 在Android Studio中使用Lambda表示式Android
- 八,Lambda表示式
- Python Lambda 表示式Python
- Java Lambda表示式Java
- 【Kotlin】Lambda表示式Kotlin
- kotlin lambda表示式Kotlin
- CPP lambda表示式
- Python - lambda 表示式Python
- Java | Lambda表示式Java
- Lambda表示式(Java)Java
- C# Lambda表示式詳解,及Lambda表示式樹的建立C#
- Java中使用lambda表示式自定義排序Java排序
- Android Studio中如何支援使用Lambda表示式Android
- C++ Lambda 表示式C++
- C#lambda表示式C#
- cpp的lambda表示式
- C++Lambda表示式C++
- 淺談lambda表示式
- Lambda表示式詳解
- Java之lambda表示式Java
- Java 8 Lambda 表示式Java
- Java的Lambda表示式Java
- Lambda表示式總結
- java 8 lambda表示式Java
- Flink 常見問題總結
- kotlin 函式和 Lambda 表示式Kotlin函式
- Java筆記:Lambda表示式Java筆記
- 《回爐重造》——Lambda 表示式
- Java 中的 Lambda 表示式Java
- c++之lambda表示式C++
- Java 基礎 —— Lambda 表示式Java
- Lambda 表示式的應用