我是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())
这可能会安抚您的代码。