2016-09-16 10 views
0

ファイルを分割するためにPythonで問題を解決するには、いくつかのアイディアが必要です。Pythonデータをルールで複数のファイルに分割する

"accountid"と "property"という2つの列を持つファイルでは、1.000.000を超える行が表示されます。 1つの「accountid」は複数のプロパティを持つことができますが、各プロパティは1つの行です。 Example

このデータをファイルごとに50.000行に分割する必要があります(これは問題ではありません)。しかし、私は1つのファイルは "accountid"あたり50の "プロパティ"も許可しています。そして多くは50以上の特性を持っています。

アイデア技術的にこのベストを解決する方法はありますか?私は、任意のコードを必要としませんが、ここでは)

おかげ

Floの

+0

たaccountId = 1との項目が13万性質(すなわち13万行に表示)を持っているのであれば、あなたは3つの別々のファイルにそれをしたい(最初の2つのファイルは、第三のファイル意志ながら、アカウントID = 1で50,000行が含まれています残りの行は30,000、他のアイテムは20,000行あります)。 – shahins

+0

はい、分割自体は問題ではありません。各ファイルは1つのIDごとに50個のプロパティしか持たないため、複雑になります。 私はすでにこれを解決する複雑なIDを持っています。最初は40.000バッチに分割し、50個以上のプロパティを持つIDを他のファイルに移動する2番目のスクリプトを実行するように分割します。 –

答えて

0

を私の心に来る一つの解決策である:

まず基づいて、あなたはあなたが必要になりますどのように多くのパーティションを決定しなければなりません2つのパラメータXとYがあります.Xは、プロパティの最大数を持つaccountidによって決まります。 accountid = 7に270プロパティに等しいプロパティの最大数があるとしましょう。つまり、パーティションにacountid = 7行(ハトホールの原則に基づく)が50以上存在しないソリューションが存在することを保証するためには、少なくとも6つのパーティションが必要です。 Yは、あなたが持っている行の総数と各パーティションの大きさによって決まります(あなたの例ではYは1000,000/50,000 = 20です)。我々は必要なパーティションの数としてXとYの最大値を取る。このシナリオでは、Number of Partitions = max(6,20)= 20.

ここで、accountidを使用してテーブル全体をソートします。各行の行番号がわかっているとします。あなたの要件の両方を満足させなければならない

P_k = {row | row_number % 20 = k} 

:私たちは、その後のようにパーティションkを定義します。

max(X、Y)= Xの場合、50K未満の行でいくつかのパーティションを許可する必要があることに注意してください。それ以外の場合、この問題の解決策はありません。

+0

感謝の男!私はすでにこのようなアプローチを考えていましたが、もう少し経験を積んだ人からのこのフィードバックを得ることは素晴らしいことです。私はこれをすぐに取り入ろうとします。私に運が欲しい) –

関連する問題