私は、数百万ものレコードを含むことができるファイル(私たちの便宜のためにcsvファイルを言うことができます)を持っています。このファイルには複数の重複が含まれている場合があります。一意のレコードを検索したいが、特定の列のみに基づいていると言うことができます(プライマリ列であると言います)。スケーラブルなソリューションを使用して、Javaの非常に大きなファイルから一意のレコードを見つける方法は?
このファイルでは、最初の2つのレコードはまったく同じではありません。しかし、私がcolumn1をプライマリと見なすと、最初の2つのレコードは私のために重複しているので(column1に同じ値を持つので)、私は最終結果に1つしか入れません。
私の現在のアプローチでは、キー値がプライマリ列のデータで、対応するマップされた値がレコード全体であるマップを使用しています。 このようにしてすべてのレコードを繰り返し処理し、レコードごとにプライマリ列のデータをキー値として、レコード全体をマップ値としてそれぞれ送ります。この方法では、反復中に重複しているプライマリ列が見つかるたびに、同じプライマリキーデータ(マップは重複を許可しない)と同じレコードを置き換えます。
このメソッドは正常に動作しますが、ヒープスペースが不足している可能性がある大きなファイルには適用できません。また、時間の複雑さも良くありません。誰かがより良い方法を提案できますか?
SQL、Hadoopなどのジョブに適切なツールを使用してください。 – ronhash
これらのデータはどのDBにも格納されておらず、生ファイルとしてのみ使用できるため、SQLはオプションではありません。 – DockYard
でも、SQLiteはファイルですが、これでクエリを実行できるようになり、nitは* any *のインストールを要求します – ronhash