我正在尝试为Apache Flink编写一些用例。我经常遇到的一个错误是
could not find implicit value for evidence parameter of type org.apache.flink.api.common.typeinfo.TypeInformation[SomeType]
我的问题是,当它们发生或何时不发生时,我无法真正确定。
最新的示例如下
...
val largeJoinDataGen = new LargeJoinDataGen(dataSetSize, dataGen, hitRatio)
val see = StreamExecutionEnvironment.getExecutionEnvironment
val newStreamInput = see.addSource(largeJoinDataGen)
...
其中
LargeJoinDataGen extends GeneratorSource[(Int, String)]
和GeneratorSource[T] extends SourceFunction[T]
都在单独的文件中定义。当试图建立这个我得到
Error:(22, 39) could not find implicit value for evidence parameter of type org.apache.flink.api.common.typeinfo.TypeInformation[(Int, String)]
val newStreamInput = see.addSource(largeJoinDataGen)
1.为什么给定的示例有错误?
2.发生这些错误时,一般的指导方针是什么?将来如何避免这些错误?
附注:第一个Scala项目和第一个flink项目,请耐心等待
最佳答案
当您拥有用户代码(即源代码或 map 函数或具有通用参数的某种性质的代码)时,通常会发生这种情况。在大多数情况下,您可以通过添加以下内容来解决此问题
implicit val typeInfo = TypeInformation.of(classOf[(Int, String)])
如果您的代码在另一个具有通用参数的方法中,则也可以尝试添加绑定(bind)到该方法的通用参数的上下文,如下所示:
def myMethod[T: TypeInformation](input: DataStream[Int]): DataStream[T] = ...