如何在ApacheFlink中将Scala数据集传递给Java类

如何在ApacheFlink中将Scala数据集传递给Java类,java,scala,apache-flink,Java,Scala,Apache Flink,我是斯卡拉的新手。所以我想用Java处理ApacheFlink的数据集。但是我有一个Scala代码中的数据集,我想把它传递给Java类的方法。 例如: 在Scala中: val dS: DataSet[Vector] = ... SampleJavaClass.sendDS(ds) 在SampleJavaClass.java中有一个类似于sendDs(datasetjavads) 我正在尝试执行此操作,但显示错误消息: 类型失配;发现: org.apache.flink.api.scala.D

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

val dS: DataSet[Vector] = ...
SampleJavaClass.sendDS(ds)
在SampleJavaClass.java中有一个类似于
sendDs(datasetjavads)

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

org.apache.flink.api.scala.DataSet[org.apache.flink.ml.math.Vector] 必需:org.apache.flink.api.java.ExecutionEnvironment错误 在涉及默认参数的应用程序中发生


我怎样才能解决这个问题。请在这方面帮助我。

Flink a中有两个数据集类 还有一个。您可以通过javaSet()从底层scala数据集访问java one

我会尽力

SampleJavaClass.sendDS(ds.javaSet())

这可能会安抚您的代码。

Scala
数据集
实际上是Java
数据集
的包装器。但是,由于方法
javaSet
是包私有的,因此您无法访问它。因此,目前只有一种非常简单的方法可以将Scala
DataSet
转换为Java
DataSet

为了访问
javaSet
方法,必须将包定义为
org.apache.flink
的子包。不过,不可否认,这不是最佳做法


如果这是一项严格要求的功能,您应该提交一份申请。

我已经尝试过这种方法。但它显示了我提到的上述错误。(涉及默认参数的应用程序中出现错误。)这意味着什么?我有一个scala文件包:(package org.apache.flink.quickstart)。我是否需要为java文件创建(包org.apache.flink.quickstart.java)?然后我可以将scala DS发送到Java DS?调用
javaSet
的文件必须位于
org.apache.flink
包中。因此,您可以自己编写一个helper函数,该函数位于
org.apache.flink
包中,只需为给定的
数据集
调用
javaSet
方法即可。但如果没有函数,它就无法工作。为什么?这里有什么问题。如果可能的话,你能解释一下吗?没有功能它不工作是什么意思?问题在于
DataSet.javaSet
方法被声明为
private[flink]
,这意味着它只能由驻留在
org.apache.flink
或子包中的代码访问。通常,您应该定义自己的包名以避免名称冲突,但在这里,这是访问
javaSet
函数的唯一方法。