如何在ApacheFlink中将Scala数据集传递给Java类
我是斯卡拉的新手。所以我想用Java处理ApacheFlink的数据集。但是我有一个Scala代码中的数据集,我想把它传递给Java类的方法。 例如: 在Scala中:如何在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
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
是包私有的,因此您无法访问它。因此,目前只有一种非常简单的方法可以将ScalaDataSet
转换为JavaDataSet
为了访问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
函数的唯一方法。