apache flink的联合类型混乱?

时间:2015-09-04 13:41:20

标签: scala apache-flink

我尝试联合一些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

1 个答案:

答案 0 :(得分:2)

问题是Flink自己的打字系统中的一个错误。表示Scala OptionTypeInfo的{​​{1}}未定义正确的Option方法。因此,未检测到两个equals是相等的。

我创建了JIRA issue并打开了Pull Request来解决问题。拉取请求应在两天内合并。如果您随后使用最新的OptionTypeInfos版本,则应修复您的问题。