我有一个用Java定义的POJO

@Data
@Builder
public class JavaItem {
    private String name;

}

我有Scala的代码

case class Record(name: String)

def asJavaItem(record: Record): JavaItem = {
    JavaItem.builder().build()
}

def recordDatasetToListJavaItem(record: Dataset[Record]): java.util.List[JavaItem] = {
    implicit val encoder: Encoder[JavaItem] = Encoders.bean(classOf[JavaItem])
    record.map(asJavaItem).collectAsList() // this fails
}

val recordDataset = Seq(Record("name")).toDS()

recordDatasetToListJavaItem(recordDataset)

我收到以下错误消息:

org.codehaus.commons.compiler.CompileException: File 'generated.java', Line 24, Column 11: failed to compile: org.codehaus.commons.compiler.CompileException: File 'generated.java', Line 24, Column 11: No applicable constructor/method found for zero actual parameters; candidates are: "JavaItem(java.lang.String)"

为什么我会收到这个错误?我怀疑这是编码器的问题.我如何正确地将Dataset[Record]映射到JavaItem的列表?

推荐答案

在Java POJO上需要一个无参数的构造函数.Spark偶尔会先构造对象,然后再调用单个数据字段的setter.这就是为什么你需要一个 struct public JavaItem(){}.

以下Lombok注释有效:

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class JavaItem {
    private String name;
}

全参数构造函数是必需的,因为根据this answer,构建器仅在不存在其他构造函数的情况下添加全参数构造函数.

Java相关问答推荐

如何在Spring Boot中创建500错误的响应正文?

Spring安全实现多个SQL表身份验证

使用Apache Poi MQLSlideShow,在XSLFTable表中,我们可以在文本段落后面的每个单元格中包含圆角矩形吗?

Java应用程序崩溃时试图读取联系人从电话

scanner 如何在执行hasNextLine一次后重新读取整个文件?

呈现文本和四舍五入矩形时出现的JavaFX窗格白色瑕疵

什么是Java原子属性的正确getter和setter

通过移动一个类解决了潜在的StubbingProblem.它怎麽工作?

在Frege中,我如何将一个字符串安全地转换为一个可能的Int?

Java页面筛选器问题

Android Java:已设置但未读取SharedPreferences

Regex以查找不包含捕获组的行

如何调整JButton的大小以适应图标?

Java HashMap保留所有时间复杂性

在Java中使用StorageReference将数据从Firebase存储添加到数组列表

具有多个分析模式的复杂分隔字符串的正则表达式

无限递归Java问题

如何在Spring Boot中为不同的部署环境管理多个.properties文件?

ControlsFX RangeSlider在方向垂直时滞后

当我try 返回可选时,Mock无法正常工作