Apache spark 编组无法在MarkLogic中使用JAXBHandle

Apache spark 编组无法在MarkLogic中使用JAXBHandle,apache-spark,jaxb,marklogic,apache-spark-mllib,Apache Spark,Jaxb,Marklogic,Apache Spark Mllib,我想将以下对象存储到MarkLogic中 @XmlRootElement(name = "trainModel") @XmlAccessorType(XmlAccessType.FIELD) public class TrainedModel implements Serializable { private static final long serialVersionUID = 1L; private String modelName; pri

我想将以下对象存储到MarkLogic中

@XmlRootElement(name = "trainModel")
@XmlAccessorType(XmlAccessType.FIELD)
public class TrainedModel implements Serializable {

    private static final long serialVersionUID = 1L;

    private String modelName;
    private CrossValidatorModel crossValidatorModel;

    public String getModelName() {
        return modelName;
    }

    public void setModelName(String modelName) {
        this.modelName = modelName;
    }

    public CrossValidatorModel getCrossValidatorModel() {
        return crossValidatorModel;
    }

    public void setCrossValidatorModel(CrossValidatorModel crossValidatorModel) {
        this.crossValidatorModel = crossValidatorModel;
    }

    @Override
    public String toString() {
        return "TrainedModel [modelName=" + modelName + ", crossValidatorModel=" + crossValidatorModel + "]";
    }
}
我使用JAXBHandle来完成我的需求,但在将TrainedModel对象存储到MarkLogic中时,CrossValidatorModel变为空

CrossValidatorModel是由
org.apache.spark.ml.tuning.CrossValidatorModel
提供的外部对象

我试过下面的代码

    CrossValidatorModel crossValidatorModel = createDataFrame(null);
    TrainedModel trainedModel = new TrainedModel();
    trainedModel.setModelName("sample");
    trainedModel.setCrossValidatorModel(crossValidatorModel);
    
    JAXBContext context = JAXBContext.newInstance(TrainedModel.class);  
    JAXBHandle<TrainedModel> jaxbHandle = new JAXBHandle<TrainedModel>(context);
    jaxbHandle.set(trainedModel);
    
    GenericDocumentManager docMgr = client.newDocumentManager();
    docMgr.writeAs("/shivling.xml", null, jaxbHandle);
CrossValidatorModel CrossValidatorModel=createDataFrame(null);
TrainedModel TrainedModel=新的TrainedModel();
trainedModel.setModelName(“样本”);
trainedModel.SetCrossValidator模型(CrossValidator模型);
JAXBContext context=JAXBContext.newInstance(TrainedModel.class);
JAXBHandle JAXBHandle=新的JAXBHandle(上下文);
jaxbHandle.set(trainedModel);
GenericDocumentManager docMgr=client.newDocumentManager();
docMgr.writeAs(“/shivling.xml”,null,jaxbHandle);
这是我得到的xml结果

<?xml  version="1.0" encoding="UTF-8"?>
<trainModel>
    <modelName>sample</modelName>
    <crossValidatorModel>
    </crossValidatorModel>
</trainModel>

样品
crossValidatorModel在此为空,请帮助我解决此问题。

NULL(在您的代码中)带有XML格式的反响:您的结果表明代码中存在语义问题

JAXB框架可以通过适当的MarkLogic Document Manager或旧的POJO方式交付:

一个简单的MarkLogic JAXB注释(您可以在批量读写事务中使用DMSDK):

代码段:

结果:

子条IO方法:

TrainedModel TrainedModel=新的TrainedModel();
trainedModel.setModelName(“历史和时事”);
训练模型(心理学);
//初始化JAXB
JAXBContext context=JAXBContext.newInstance(TrainedModel.class);
//波乔手柄
JAXBHandle writeHandle=新的JAXBHandle(上下文);
//编组
Marshaller jaxMar=context.createMarshaller();
字符串docId=“/train model.xml”;
//伊斯玛沙雷
jaxMar.marshall(培训模型,System.out);
//把手
writeHandle.set(trainedModel);
//将POJO写入MarkLogic
docMgr.write(docId,writeHandle);

感谢@Fiona Chen的回答,CrossValidatorModel不是字符串类型,因此我不能使用trainedModel.setCrossValidatorModel(“生物学”),CrossValidatorModel是org.apache.spark.ml.tuning.CrossValidatorModel给出的对象。
        XMLDocumentManager docMgr = marklogic.newXMLDocumentManager();

        TrainedModel trainedModel = new TrainedModel();
            
        trainedModel.setModelName("History and Psychology");
        trainedModel.setCrossValidatorModel("Biology");

        String docId = "/train-model.xml";

        docMgr.writeAs(docId, trainedModel);
    TrainedModel trainedModel = new TrainedModel();
            
        trainedModel.setModelName("History and Current Affairs");
        trainedModel.setCrossValidatorModel("Psychology");
        
        // initialize JAXB 
        JAXBContext context = JAXBContext.newInstance(TrainedModel.class);
        
        // POJO Handle
        JAXBHandle<TrainedModel> writeHandle = new JAXBHandle<TrainedModel>(context);
        
        // Marshalling
        Marshaller jaxMar = context.createMarshaller();
            
        String docId = "/train-model.xml";

        // IsMarshalled
        jaxMar.marshal(trainedModel, System.out);

        // set Handle
        writeHandle.set(trainedModel);

       // write POJO to MarkLogic
        docMgr.write(docId, writeHandle);