Java Flink cassandraOutputFormat元组需要冻结值

Java Flink cassandraOutputFormat元组需要冻结值,java,cassandra,apache-flink,Java,Cassandra,Apache Flink,我有一个flink项目,它将作为批处理作业在cassandra表中插入数据。我已经有了一个flink stream项目,它正在将pojo写入同一个cassandra表,但是cassandraOutputFormat需要数据作为元组(希望在某个时候可以像CassandraSink那样接受pojo)。这就是我的pojo: @Table(keyspace="mykeyspace", name="mytablename") public class AlphaGroupingObject impleme

我有一个flink项目,它将作为批处理作业在cassandra表中插入数据。我已经有了一个flink stream项目,它正在将pojo写入同一个cassandra表,但是cassandraOutputFormat需要数据作为元组(希望在某个时候可以像CassandraSink那样接受pojo)。这就是我的pojo:

@Table(keyspace="mykeyspace", name="mytablename")
public class AlphaGroupingObject implements Serializable {

    @Column(name = "jobId")
    private String jobId;
    @Column(name = "datalist")
    @Frozen("list<frozen<dataobj>")
    private List<CustomDataObj> dataobjs;
    @Column(name = "userid")
    private String userid;

    //Getters and Setters
}
编辑2

包括CustomDataObj绑定到的cassandra中的表模式和mytablename模式

CREATE TYPE mykeyspace.dataobj (
    userid text,
    groupid text,
    valuetext text,
    comments text
);

CREATE TABLE mykeyspace.mytablename (
    jobid text,
    datalist list<frozen<dataobj>>,
    userid text,
    PRIMARY KEY (jobid, userid)
);
创建类型mykeyspace.dataobj(
用户标识文本,
groupid文本,
valuetext文本,
评论文本
);
创建表mykeyspace.mytablename(
jobid文本,
数据列表,
用户标识文本,
主键(作业ID、用户ID)
);

CustomDataObj
类上添加
UDT
注释

@UDT(name = "dataobj")
public class CustomDataObj { 
    //...... 
}

已编辑

jobid
注释更改为
@Column(name=“jobid”)
并将
dataobjs
冻结注释更改为
@freezed

@Table(keyspace="mykeyspace", name="mytablename")
public class AlphaGroupingObject implements Serializable {

    @Column(name = "jobid")
    private String jobId;

    @Column(name = "datalist")
    @Frozen
    private List<CustomDataObj> dataobjs;
    @Column(name = "userid")
    private String userid;

    //Getters and Setters
}
@Table(keyspace=“mykeyspace”,name=“mytablename”)
公共类AlphaGroupingObject实现可序列化{
@列(name=“jobid”)
私有字符串jobId;
@列(name=“datalist”)
@冻结
私有列表dataobjs;
@列(name=“userid”)
私有字符串用户标识;
//接球手和接球手
}

我相信我找到了一种比为cassandraOutputFormat提供元组更好的方法,但从技术上讲,它仍然不能回答这个问题,所以我不会将此标记为答案。最后我使用了cassandra的对象映射器,这样我就可以将pojo发送到表中。仍然需要验证数据是否成功地到达表中,以及是否一切都按照实现方式正常工作,但我觉得这将帮助任何面临类似问题的人


以下是概述解决方案的文档:

是否正确
列表
是的,它仍然运行良好(老实说,它没有问题很奇怪)。我还添加了缺少的“>”以确保正确。添加表并键入schemaTry以更改
@freezed("listChanged为just@Frozed,同样的错误。对您在第一次编辑中概述的内容进行了更改,仍然引发了同样的错误。检查此项我看到它如何建议为注释为UDT的pojo使用自定义编解码器,但我的问题是如何将元组的字段设置为Frozed。在pojo中执行此操作的方法只是添加@Frozed,但对于无法设置的元组完成。
@UDT(name="dataobj", keyspace = "mykeyspace")
public class CustomDataObj implements Serializable {


    @Field(name = "userid")
    private String userId;

    @Field(name = "groupid")
    private String groupId;

    @Field(name = "valuetext")
    private String valueText;

    @Field(name = "comments")
    private String comments;

    //Getters and setters
}
CREATE TYPE mykeyspace.dataobj (
    userid text,
    groupid text,
    valuetext text,
    comments text
);

CREATE TABLE mykeyspace.mytablename (
    jobid text,
    datalist list<frozen<dataobj>>,
    userid text,
    PRIMARY KEY (jobid, userid)
);
@UDT(name = "dataobj")
public class CustomDataObj { 
    //...... 
}
@Table(keyspace="mykeyspace", name="mytablename")
public class AlphaGroupingObject implements Serializable {

    @Column(name = "jobid")
    private String jobId;

    @Column(name = "datalist")
    @Frozen
    private List<CustomDataObj> dataobjs;
    @Column(name = "userid")
    private String userid;

    //Getters and Setters
}