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

时间:2015-10-21 10:22:56

标签: apache-spark cassandra-2.0 pojo datastax-java-driver spark-cassandra-connector

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

这里的问题是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();

}

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

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

我的问题是如何创建一个包含TestPojo中所有400个字段的构造函数,这样无论test.csv有多少个字段,我的代码都应该能够处理它。

我尝试创建一个包含所有400个字段的通用构造函数,但最终出现了编译错误,说明构造函数参数的限制只有255个字段。

还是有更好的方法来处理这个用例?

问题2:如果来自test.csv的数据将转到cassandra中的多个表,那么在cassandra中将5个test.csv用于测试表,另外5个cols将用于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 .

}
});

我只返回一个TestPojo对象。如果来自test.csv的数据将用于测试table和test2表,我将需要返回TestPojo和Test2Pojo中的另一个对象。

0 个答案:

没有答案