使用 Java OutputFormat 发出 Scala 元组

Using a Java OutputFormat to emit Scala Tuples

我正在尝试为 ArangoDB 编写自定义 OutputFormat。我使用 CassandraOutputFormat.java 作为灵感,换掉了相关的驱动程序和调用等。我在 Java 中写了这篇文章,因为我找不到 OutputFormat 的 Scala 示例。 class 因此定义为:

public class ArangoOutputFormat<OUT extends Tuple> extends RichOutputFormat<OUT>

现在,我要写入ArangoDB的Flink程序是用Scala写的。数据集 testDataSet[Tuple2[Long, Long]]。写入 ArangoDB 的调用如下所示:

test.output(
  new ArangoOutputFormat[(Long, Long)]()
);

但是在编译时出现以下错误:

Error:(47, 11) type arguments [(Long, Long)] do not conform to class ArangoOutputFormat's type parameter bounds [OUT <: org.apache.flink.api.java.tuple.Tuple] new ArangoOutputFormat(Long, Long)

在同时使用 Scala 和 Java classes 时,我通常对类型系统有点困惑,谁能解释这里发生了什么?

提前致谢, 罗布

ArangoOutputFormat 被输入到 Flink 的 Java 元组 (org.apache.flink.api.java.tuple.Tuple) 而你的 Scala 程序使用 Scala 的元组。 Flink 的 Java 元组与 Scala 的元组不兼容。您需要在接收器之前的 Mapper 中显式创建 Java 元组。