我正在尝试为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] = ...

10-06 00:39