Java 如何构建编码器<;试试<;MyPojo>&燃气轮机;在爪哇

Java 如何构建编码器<;试试<;MyPojo>&燃气轮机;在爪哇,java,apache-spark,encoder,Java,Apache Spark,Encoder,我正在用java实现一个spark进程,并希望从相同参数化类型的RDD中为一些自己制作的MyPojo类创建一个Dataset,其中Try是scalaTry。在scala中,编码器是隐式的,但在java中,我需要显式地提供它 现在,我可以使用Encoders.bean(MyPojo.class)获得一个工作的编码器。我希望有一些代码可以从scala使用的编码器构建编码器。但是我找不到它 [注意:我刚刚在scala中进行了尝试,但没有找到Try类型的隐式表达式……因此,这个问题在scala中也是有效

我正在用java实现一个spark进程,并希望从相同参数化类型的RDD中为一些自己制作的MyPojo类创建一个
Dataset
,其中
Try
是scala
Try
。在scala中,编码器是隐式的,但在java中,我需要显式地提供它

现在,我可以使用
Encoders.bean(MyPojo.class)
获得一个工作的
编码器。我希望有一些代码可以从scala使用的
编码器
构建
编码器。但是我找不到它

[注意:我刚刚在scala中进行了尝试,但没有找到Try类型的隐式表达式……因此,这个问题在scala中也是有效的]


那么,我该怎么办呢?

经过一番研究,我得出结论

  • 这是不可能的(或者可能是过于复杂)
  • 这是因为它不是使用数据集的方式
  • 起初,我认为Dataset是RDD的一个超级、更通用的版本。但事实并非如此。实际上,它在类型方面不太通用,因为数据集中存储的类型应该是“平坦的”或“可平坦的”

    传统的Pojo要么是扁平结构(每个字段都有一个可以由一列表示的值类型),要么在字段具有Pojo类型时可以扁平化。另一方面,没有简单的方法“展平”Try之类的类型,它基本上是某种类型(问题中的MyPojo)或异常

    这一结论也适用于所有非pojo类型,例如可以有多个实现的接口。显然,这引出了一个问题:非pojo的类如何,例如,因为它包含Try或interface类型的字段。可能
    Encoders.bean
    在运行时会失败。关于类型安全,就到此为止


    总之,为了解决我的问题,即跟踪失败的项目,我想我会增加一个“错误”列。或者类似的

    我被否决了,但我不知道为什么。想解释一下吗?