0

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 つのオブジェクトを返す必要があります。

4

0 に答える 0