Flink 的运算符状态示例无法编译(java.lang.Iterable 与 scala.collection.Iterable)
Flink's operator state example won't compile (java.lang.Iterable vs. scala.collection.Iterable)
我正在使用 apache flink 1.6,我正在尝试实现一个有状态的处理函数,它使用 flink 的运算符状态,es 在这里描述:https://ci.apache.org/projects/flink/flink-docs-release-1.6/dev/stream/state/state.html#stateful-source-functions
但是,此页面上的示例不会为我编译:
所以这样做的原因是 checkpointedState.get()
将 return 变成 java.lang.Iterable
,而不是 scala.collection.Iterable
。这是什么原因?是我在某处出错了,还是示例代码有误?
好吧,我不知道,这是否应该是理所当然的 clear/taken,但是在添加这个之后:
import scala.collection.JavaConversions._
我能够将 java 迭代器用作普通的 Scala 集合,并且该示例工作正常。
checkpointedState.get()
将 return java.lang.Iterable 因为 Flink 检查点的 api 是用 java 而不是 scala 编程的。
看起来这个例子是错误的,你可以在 JIRA 上为社区创建一个问题。
解决方案就像user826955所说的,你可以使用scala.collection.JavaConversions._
将java.lang.Iterable转换为scala集合。
我正在使用 apache flink 1.6,我正在尝试实现一个有状态的处理函数,它使用 flink 的运算符状态,es 在这里描述:https://ci.apache.org/projects/flink/flink-docs-release-1.6/dev/stream/state/state.html#stateful-source-functions
但是,此页面上的示例不会为我编译:
所以这样做的原因是 checkpointedState.get()
将 return 变成 java.lang.Iterable
,而不是 scala.collection.Iterable
。这是什么原因?是我在某处出错了,还是示例代码有误?
好吧,我不知道,这是否应该是理所当然的 clear/taken,但是在添加这个之后:
import scala.collection.JavaConversions._
我能够将 java 迭代器用作普通的 Scala 集合,并且该示例工作正常。
checkpointedState.get()
将 return java.lang.Iterable 因为 Flink 检查点的 api 是用 java 而不是 scala 编程的。
看起来这个例子是错误的,你可以在 JIRA 上为社区创建一个问题。
解决方案就像user826955所说的,你可以使用scala.collection.JavaConversions._
将java.lang.Iterable转换为scala集合。