我尝试联合一些flink DataSet。它们包含在Seq中。以下是产生问题的代码
case class clickZap ( date: LocalDateTime, stbId:String, channelId :Int , nozap:Boolean)
val afterLastz: DataSet[clickZap]= ...
val ma_range: IndexedSeq[DataSet[(Int, Option[(java.time.LocalDateTime, String, Int, Boolean)])]] = for (i <- Range (0,min_n))
yield afterLastz.reduceGroup(it =>(i, maxBeforezTCZ(it,at plusMinutes(i))))
//val ma_all = ma_range.slice(1, min_n).foldLeft(ma_range.head)(_ union _)
val ma_all = ma_range.head union(ma_range.tail.head)
我得到的是
线程“main”中的异常 org.apache.flink.api.common.InvalidProgramException:无法联合 不同类型的投入。 Input1 = scala.Tuple2(_1:整数,_2: 选项[scala.Tuple4(_1:GenericType [java.time.LocalDateTime],_ 2: String,_3:Integer,_4:Boolean)]),input2 = scala.Tuple2(_1:Integer, _2:选项[scala.Tuple4(_1:GenericType [java.time.LocalDateTime],_ 2:String,_3:Integer,_4:Boolean)])
我错过了什么?这些类型没有什么不同,是吗?工会运营商应该是便宜的,所以它似乎没有吸引力来规避这个问题。 我提供了前两行代码作为参数,DataSet中的数据类型是相同的。 我使用flink版本0.9.0和0.9.1
答案 0 :(得分:2)
问题是Flink自己的打字系统中的一个错误。表示Scala OptionTypeInfo
的{{1}}未定义正确的Option
方法。因此,未检测到两个equals
是相等的。
我创建了JIRA issue并打开了Pull Request来解决问题。拉取请求应在两天内合并。如果您随后使用最新的OptionTypeInfos
版本,则应修复您的问题。