首页 文章

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

提问于
浏览
3

我是Scala的新手 . 所以我想用Java处理Apache Flink的DataSet . 但我在Scala代码中有一个DataSet,我希望在Java类的方法中传递 . 例如:在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涉及默认参数的应用程序中发生错误 .

我怎样才能解决这个问题 . 请帮帮我 .

2 回答

  • 3

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

    要访问 javaSet 方法,您必须将包定义为 org.apache.flink 的子包 . 不过,诚然,这不是最佳做法 .

    如果这是严格要求的功能,则应为其提交JIRA ticket .

  • 1

    Flink中有两个DataSet类java one https://ci.apache.org/projects/flink/flink-docs-master/api/java/index.html?org/apache/flink/api/scala/DataSet.htmlscala one . 您可以通过javaSet()从底层的scala DataSet访问java .

    我会尝试

    SampleJavaClass.sendDS(ds.javaSet())
    

    这可能会安抚你的代码 .

相关问题