Cassandra にレコードを挿入する必要があるため、csv ファイルを入力とする関数を作成しました。csv ファイルの名前が test.csv だとします。Cassandra には、テーブル テストがあります。csv ファイルの各行をテスト テーブルに格納する必要があります。私は spark Java api を使用しているので、Pojo のフィールドと Cassandra の列をマッピングするための POJO クラスまたは DTO クラスも作成しています。
ここでの問題は、test.csv に 50 個のカンマ区切りの値があり、cassandra の test テーブルの 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 を Objects の Rdd に返しています。それが完了したら、TestPojo マッピングを使用して、その rdd を Cassandra テーブル テストに保存します。
私の問題は、将来、test.csv に 60 列ある場合、50 フィールドのみでコンストラクターを呼び出しているため、コードが機能しないことです。
私の質問は、test.csv に含まれるフィールドの数に関係なく、私のコードがそれを処理できるように、TestPojo に 400 個のフィールドすべてを持つコンストラクターを作成する方法です。
400 フィールドすべてを含む一般的なコンストラクターを作成しようとしましたが、コンストラクター パラメーターの制限は 255 フィールドのみであるというコンパイル エラーが発生しました。
または、このユースケースを処理するためのより良い方法はありますか??
質問 2: test.csv からのデータが cassandra の複数のテーブルに送信される場合、test.csv の 5 つの列が 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 .
}
});
TestPojo のオブジェクトを 1 つだけ返しています。test.csv からのデータが test table と test2 table に送られる場合、TestPojo と Test2Pojo の 2 つのオブジェクトを返す必要があります。