Apache spark 我必须使用Pojo对象映射将记录插入Cassandra

Apache spark 我必须使用Pojo对象映射将记录插入Cassandra,apache-spark,cassandra-2.0,pojo,datastax-java-driver,spark-cassandra-connector,Apache Spark,Cassandra 2.0,Pojo,Datastax Java Driver,Spark Cassandra Connector,我需要将记录插入Cassandra,所以我编写了一个函数,其输入是csv文件。假设csv文件的名称为test.csv。在卡桑德拉,我有一个桌面测试。我需要将csv文件的每一行存储到测试表中。因为我使用的是spark java api,所以我还创建了一个POJO类或DTO类,用于映射POJO的字段和Cassandra的列 这里的问题是test.csv有大约50个逗号分隔的值,这些值必须存储在cassandra测试表的50列中,共有400列。所以在我的测试POJO类中,我创建了这50个字段的构造函数

我需要将记录插入Cassandra,所以我编写了一个函数,其输入是csv文件。假设csv文件的名称为test.csv。在卡桑德拉,我有一个桌面测试。我需要将csv文件的每一行存储到测试表中。因为我使用的是spark java api,所以我还创建了一个POJO类或DTO类,用于映射POJO的字段和Cassandra的列

这里的问题是test.csv有大约50个逗号分隔的值,这些值必须存储在cassandra测试表的50列中,共有400列。所以在我的测试POJO类中,我创建了这50个字段的构造函数

JavaRDD<String> fileRdd = ctx.textFile("home/user/test.csv");
JavaRDD fileObjectRdd = fileRdd.map(
            new Function<String, Object>() {

//do some tranformation with data

switch(fileName){
case "test" :return  new TestPojo(1,3,4,--50); //calling the constructor with 50 fields .

}
});

switch(fileName){
test : javaFunctions(fileObjectRdd).writerBuilder("testKeyspace", "test", mapToRow(TestPojo.class)).saveToCassandra();
javarddfilerdd=ctx.textFile(“home/user/test.csv”);
JavaRDD fileObjectRdd=fileRdd.map(
新函数(){
//用数据做一些转换
开关(文件名){
案例“test”:返回新的TestPojo(1,3,4,--50);//使用50个字段调用构造函数。
}
});
开关(文件名){
test:javaFunctions(fileObjectRdd).writerBuilder(“testKeyspace”,“test”,mapToRow(TestPojo.class)).saveToCassandra();
}

所以在这里,我总是将test.csv文件每一行的TestPojo类的对象返回给对象的Rdd。完成后,我将使用TestPojo映射将rdd保存到Cassandra表测试中

我的问题是,如果test.csv将来有60列,那么我的代码将无法工作,因为我调用的构造函数只有50个字段

JavaRDD<String> fileRdd = ctx.textFile("home/user/test.csv");
JavaRDD fileObjectRdd = fileRdd.map(
            new Function<String, Object>() {

//do some tranformation with data

switch(fileName){
case "test" :return  new TestPojo(1,3,4,--50); //calling the constructor with 50 fields .

}
});

switch(fileName){
test : javaFunctions(fileObjectRdd).writerBuilder("testKeyspace", "test", mapToRow(TestPojo.class)).saveToCassandra();
我的问题是如何创建一个包含TestPojo中所有400个字段的构造函数,这样无论test.csv中有多少字段,我的代码都应该能够处理它

我试图创建一个包含所有400个字段的通用构造函数,但最终出现了一个编译错误,即构造函数参数的限制仅为255个字段

或者有没有更好的方法来处理这个用例

问题2:如果test.csv中的数据将进入cassandra中的多个表,那么5列test.csv将进入cassandra中的test表,5列其他列将进入cassandra中的test2表,该怎么办

这里的问题是我在做什么

JavaRDD fileObjectRdd = fileRdd.map(
        new Function<String, Object>() {

//do some tranformation with data

switch(fileName){
case "test" :return  new TestPojo(1,3,4,--50); //calling the constructor     with 50 fields .

}
});
JavaRDD fileObjectRdd=fileRdd.map(
新函数(){
//用数据做一些转换
开关(文件名){
案例“test”:返回新的TestPojo(1,3,4,--50);//使用50个字段调用构造函数。
}
});

我只返回TestPojo的一个对象。如果来自test.csv的数据将被发送到test表和test2表,我需要返回两个对象,一个是TestPojo,另一个是Test2Pojo。

为什么您不想只将键属性存储为列,而将其余的存储为JSON序列化对象?您可以使用批处理查询来为表创建动态查询,以及从Rdd文件中收到的列数,Rdd是从文件中创建的