私は文字列を読んでいるHadoop Javaでこれをやっています。文字列は、トークン化されて配列に入れられた巨大なものです。キーと値のペアがありますが、順不同です。この順序を固定して、テーブルとしてロードできるようにします。そのため、SQL で列を選択すると (これをテーブルにロードした後)、1 つのタイプのすべてのキーが colA にある必要があります。
String 配列の各単語をチェックし、それらを新しい文字列の固定位置にコピーしています。私がこれを行うと考えた方法は、if else はしごを次のように使用することです: //行はトークン化された順序付けられていない文字列です
String[] newRow = new String[150];
for (int i = 0; i < row.length; ++i) {
if(row[i].equals("token1")){
newRow[0] = row[i]; //key
newRow[1] = row[i+1];//value
}
else if(row[i].equals("token2")){
newRow[2] = row[i];
newRow[3] = row[i+1];
}//...and so on. Elseif ladder at least is at least 100 long.
これを行うためのより効率的な方法があるかどうか知りたいですか?
PS: 文字列をソートしていません。例: 行 1 の文字列は {apple,good,banana,bad}、行 2 の文字列は {banana,good,apple,bad} で、リンゴとバナナがキーです。これで、私の出力には、最初のキーとしてリンゴ、次にバナナという 2 つのレコードが表示されます。出力は次のようになります: newRow1: {apple,good,banana,bad} , newRow2: {apple,bad,banana,good}. 基本的に、すべての入力を固定出力に再配置しています。