2

ビッグデータマイニングの研究プロジェクトに取り組んでいます。私は現在、私が持っているデータを辞書に整理するためのコードを書いています。しかし、データ量が多すぎて、辞書作成中にパソコンのメモリが足りなくなりました。辞書を定期的にメイン メモリに書き込み、この方法で複数の辞書を作成する必要があります。次に、結果の複数の辞書を比較し、それに応じてキーと値を更新し、すべてをディスク上の 1 つの大きな辞書に格納する必要があります。Pythonでこれを行う方法はありますか? ディスクに dict をすばやく書き込み、2 つの dict を比較してキーを更新できる API が必要です。私は実際に2つの辞書を比較するコードを書くことができますが、それは問題ではありませんが、メモリを使い果たすことなくそれを行う必要があります..

私の口述は次のようになります: "オレンジ" : ["それは果物です","とてもおいしいです",...]

4

4 に答える 4

2

Hoffman に同意します。リレーショナル データベースを選択してください。データ処理は、リレーショナル エンジンにとっては少し変わったタスクですが、使いやすさと展開のしやすさと大規模なデータセットの速度との間の適切な妥協点であると信じています。

私は通常、Python に付属している sqlite3 を使用しますが、より頻繁にapswを介して使用します。sqlite3 のようなリレーショナル エンジンの利点は、結合と更新を通じてデータを大量に処理するように指示できることです。また、必要なデータのすべてのメモリ/ディスク スワッピングを適切な方法で処理します。また、メモリ内データベースを使用して、大きなデータとやり取りする必要がある小さなデータを保持し、それらを「ATTACH」ステートメントでリンクさせることもできます。この方法でギガバイトを処理しました。

于 2012-07-10T03:29:51.533 に答える
0

PostgreSQL などのデータベースを使用する必要があります。

于 2012-07-10T03:14:20.477 に答える
0

最初に考えた - 64 ビット Python に切り替えて、コンピュータの仮想メモリ設定を増やしてください ;-)

再考-大きな辞書を作成したら、キーでソートしてファイルに書き込むことができます。すべてのデータが書き込まれたら、すべてのファイルを同時に反復処理し、最終データを比較して書き出すことができます。

于 2012-07-10T03:34:40.110 に答える
0

「メインメモリ」とは、ハードドライブのことですか? コンピューターには 1 つのメモリ システムしかありません。

pickleモジュールを使用して、Python データ オブジェクトをファイルに書き込むことができます。複数のオブジェクトを 1 つのファイルにピクルできるかどうかはわかりませんが、それは重要ではありません。

import pickle

def dump_dict(dict, name):
    with open(name, 'wb') as file:
        return pickle.dump(file, dict)

def get_dict(name):
    with open(name, 'rb') as file:
        return pickle.load(file)

def get_key(key, *list_of_dicts):
    """The first argument is the key; any further args are interpreted as the names of
pickled dict files to check."""
    out = []
    for name in *list_of_dicts:
        with open(name, 'rb') as f:
            out.append(pickle.load(f).get(key)) # Add this dict's value, glossing over KeyErrors.
    return tuple(out)

必要に応じて、残りの部分を確実に把握し、機能を拡張できます。

于 2012-07-10T03:35:16.303 に答える