如何在 Apache Flink 中将 Scala DataSet 传递给 Java Class

How to pass Scala DataSet to Java Class in Apache Flink

我是 Scala 新手。所以我想在Java中处理Apache Flink的DataSet。但是我在 Scala 代码中有一个数据集,我想传入 Java Class 的方法。 例如: 在 Scala 中:

val dS: DataSet[Vector] = ...
SampleJavaClass.sendDS(ds)

在SampleJavaClass.java中有一个类似sendDs(DataSet<Vector> javaDs)

的方法

我正在尝试执行此操作但显示错误消息: 类型不匹配;发现:

org.apache.flink.api.scala.DataSet[org.apache.flink.ml.math.Vector] required: org.apache.flink.api.java.ExecutionEnvironment Error occurred in an application involving default arguments.

我该如何解决这个问题。请帮我解决这个问题。

Flink a java one中有两个DataSet 类 https://ci.apache.org/projects/flink/flink-docs-master/api/java/index.html?org/apache/flink/api/scala/DataSet.html and a scala one。您可以通过 javaSet().

从基础 scala 数据集中访问 java 一个

我会尝试

SampleJavaClass.sendDS(ds.javaSet())

这可能会安抚您的代码。

Scala DataSet 确实是 Java DataSet 的包装器。但是,由于方法 javaSet 是包私有的,您无法访问它。因此,目前只有一种非常笨拙的方法可以将 Scala DataSet 转换为 Java DataSet.

为了访问 javaSet 方法,您必须将您的包定义为 org.apache.flink 的子包。诚然,这不是最佳实践。

如果这是一项严格要求的功能,您应该为它提交 JIRA ticket