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



我是Scala的新手。所以我想在Java中处理Apache Flink的数据集。但是我在 Scala 代码中有一个数据集,我想在 Java 类的方法中传递它。例如:在斯卡拉:

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] 必需:org.apache.flink.api.java.ExecutionEnvironment Error 发生在涉及默认参数的应用程序中。

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

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

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

如果这是严格要求的功能,则应为其提交JIRA票证。

Flink 中有两个 DataSet 类,一个 Java 类https://ci.apache.org/projects/flink/flink-docs-master/api/java/index.html?org/apache/flink/api/scala/DataSet.html 和斯卡拉的。您可以通过 javaSet() 从底层 scala DataSet 访问 java 版本。

我会尝试

SampleJavaClass.sendDS(ds.javaSet())

这可能会安抚您的代码。

相关内容

  • 没有找到相关文章

最新更新