2016-09-16 36 views
0

我需要一些想法,解決我的問題在Python分割文件。Python的數據分割成多個文件與規則

我超過1.000.000行的文件有2列:「ACCOUNTID」和「屬性」。一個「accountid」可以有多個屬性,但每個屬性是一行。看起來像這樣: Example

我需要將此數據拆分爲每個文件50.000行(這不是問題)。但是,我一個文件也只允許每個「accountid」50個「屬性」。而且有很多屬性超過50。

你有什麼想法如何從技術上解決這個最好?我不需要任何代碼;)

感謝

弗洛

+0

所以,如果用ACCOUNTID = 1的項目有13萬點的屬性(即13萬行顯示出來),你想讓它3個單獨的文件(前兩個文件將包含50,000行與ACCOUNTID = 1,而3號文件將剩餘30,000行以及20,000行其他項目)? – shahins

+0

是的,但分裂本身不是問題。它變得複雜,因爲每個文件只允許每個單一ID有50個屬性。 我已經有一個複雜的ID來解決這個問題。就像首先分裂成40,000個批次一樣,然後分割,然後運行第二個腳本,將具有超過50個屬性的ID移動到其他文件。 –

回答

0

下面是我想到一個解決辦法:

首先你要確定你將多少個分區需要的基礎上,兩個參數X和Y. X由具有最大數量屬性的會計確定。假設accountid = 7的屬性的最大數量等於270個屬性。這意味着您將需要至少6個分區來確保存在解決方案,其中沒有任何分區將具有超過50個的acountid = 7行(基於鴿子的原理)。 Y取決於你所擁有的總行數和每個分區的大小(在你的例子中Y是1000,000/50,000 = 20)。我們將X和Y的最大值作爲我們需要的分區數量。在這種情況下:分區= MAX(6,20)的數= 20

現在,您可以使用ACCOUNTID排序整個表。我們假設我們知道每行的行號。然後我們將分區k定義爲:

P_k = {row | row_number % 20 = k} 

這應該滿足您的兩個要求。

注意,如果MAX(X,Y)= X,你將不得不讓一些分區與小於50K行。否則,這個問題沒有解決辦法。

+0

謝謝你!我已經在考慮這種方法,但是從具有更多經驗的人那裏獲得這種反饋是非常棒的。我會盡力將這一點納入其中。祝我好運 ;) –